diff options
| -rw-r--r-- | docs/markdown/snippets/add_dict_values.md | 12 | ||||
| -rw-r--r-- | docs/yaml/elementary/dict.yml | 5 | ||||
| -rw-r--r-- | mesonbuild/interpreter/primitives/dict.py | 13 |
3 files changed, 29 insertions, 1 deletions
diff --git a/docs/markdown/snippets/add_dict_values.md b/docs/markdown/snippets/add_dict_values.md new file mode 100644 index 000000000..0b97a704e --- /dev/null +++ b/docs/markdown/snippets/add_dict_values.md @@ -0,0 +1,12 @@ +## Added a `values()` method for dictionaries + +Mesons built-in [[@dict]] type now supports the [[dict.values]] method +to retrieve the dictionary values as an array, analogous to the +[[dict.keys]] method. + +```meson +dict = { 'b': 'world', 'a': 'hello' } + +[[#dict.keys]] # Returns ['a', 'b'] +[[#dict.values]] # Returns ['hello', 'world'] +``` diff --git a/docs/yaml/elementary/dict.yml b/docs/yaml/elementary/dict.yml index 70844bb3b..3a5c484dd 100644 --- a/docs/yaml/elementary/dict.yml +++ b/docs/yaml/elementary/dict.yml @@ -46,3 +46,8 @@ methods: - name: keys returns: array[str] description: Returns an array of keys in the dictionary. + +- name: values + returns: array[any] + description: Returns an array of values in the dictionary. + since: 1.10.0 diff --git a/mesonbuild/interpreter/primitives/dict.py b/mesonbuild/interpreter/primitives/dict.py index d641fa88f..794c1505e 100644 --- a/mesonbuild/interpreter/primitives/dict.py +++ b/mesonbuild/interpreter/primitives/dict.py @@ -9,6 +9,7 @@ from ...interpreterbase import ( IterableObject, MesonOperator, ObjectHolder, + FeatureNew, typed_operator, noKwargs, noPosargs, @@ -48,6 +49,9 @@ class DictHolder(ObjectHolder[T.Dict[str, TYPE_var]], IterableObject): def size(self) -> int: return len(self.held_object) + def _keys_getter(self) -> T.List[str]: + return sorted(self.held_object) + @noKwargs @typed_pos_args('dict.has_key', str) @InterpreterObject.method('has_key') @@ -58,7 +62,14 @@ class DictHolder(ObjectHolder[T.Dict[str, TYPE_var]], IterableObject): @noPosargs @InterpreterObject.method('keys') def keys_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> T.List[str]: - return sorted(self.held_object) + return self._keys_getter() + + @noKwargs + @noPosargs + @InterpreterObject.method('values') + @FeatureNew('dict.values', '1.10.0') + def values_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> T.List[TYPE_var]: + return [self.held_object[k] for k in self._keys_getter()] @noArgsFlattening @noKwargs |
