Smalltalk-在有条件的字典数组上进行迭代

问题描述 投票:2回答:1

我正在研究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

我找不到这种特殊情况的文档(数组迭代+条件+返回)

希望有人可以帮助我!

smalltalk gnu-smalltalk
1个回答
4
投票

要测试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代码。

© www.soinside.com 2019 - 2024. All rights reserved.