Smalltalk - 遍历带条件的字典数组
Smalltalk - iterate over a dict array with conditions
我正在研究 Smalltalk 小方法,我希望此方法遍历字典数组并 return 真或假取决于条件。
字典数组是一个实例变量,名称为dictArray。
看起来像:[{'name': toto, 'age': 12}, {'name': tata, 'age': 25}]
所以我想遍历 dictArray 并验证每个项目的名称和年龄。如果匹配 I return true else false 并且迭代结束。
在 python 中应该是这样的:
for item in dictArray:
if item['name'] == aName and item['age'] == aAge:
return True
return False
我找不到关于这种特殊情况的文档(数组迭代 + 条件 + return)
希望有人能帮助我!
要测试集合是否包含与条件匹配的元素,请使用 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 代码。
我正在研究 Smalltalk 小方法,我希望此方法遍历字典数组并 return 真或假取决于条件。
字典数组是一个实例变量,名称为dictArray。
看起来像:[{'name': toto, 'age': 12}, {'name': tata, 'age': 25}]
所以我想遍历 dictArray 并验证每个项目的名称和年龄。如果匹配 I return true else false 并且迭代结束。
在 python 中应该是这样的:
for item in dictArray:
if item['name'] == aName and item['age'] == aAge:
return True
return False
我找不到关于这种特殊情况的文档(数组迭代 + 条件 + return)
希望有人能帮助我!
要测试集合是否包含与条件匹配的元素,请使用 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 代码。