我正在研究Smalltalk小型方法,我希望该方法在字典数组上进行迭代,并根据条件返回True或False。
字典数组是一个实例变量,名称为dictArray。
它看起来像:[{'name': toto, 'age': 12}, {'name': tata, 'age': 25}]
所以我想遍历dictArray并为每个项目验证名称和年龄。如果匹配,则返回true,否则返回false,然后结束迭代。
在python中,它看起来应该像:
for item in dictArray:
if item['name'] == aName and item['age'] == aAge:
return True
return False
我找不到这种特殊情况的文档(数组迭代+条件+返回)
希望有人可以帮助我!
要测试Collection是否包含符合条件的元素,请使用anySatisfy:
。如果存在匹配的元素,则回答为true。
dictArray anySatisfy: [:each | (each at: 'name') = aName and: [(each at: 'age') = anAge]]
参考:https://www.gnu.org/software/smalltalk/manual-base/html_node/Iterable_002denumeration.html
上述方法是编写它的首选方法。以下仅用于说明它与您的Python代码示例的关系。
[anySatisfy:
可以根据do:
]实现>
anySatisfy: aBlock self do: [:each | (aBlock value: each) ifTrue: [^ true]]. ^ false
或根据您的情况阐明:
dictArray do: [:each | ((each at: 'name') = aName and: [(each at: 'age') = anAge]) ifTrue: [^ true]]. ^ false
这等效于您的Python代码。