我的收藏集是一个包含许多词典的集合。如何迭代Set中的每个字典以选择特定的键。
a Set(a Dictionary('age'->'25' 'code'->2512) a Dictionary('age'->'40' 'code'->'1243') a Dictionary('age'->'35' 'code'->'7854'))
答案 0 :(得分:4)
detect:
如果您只想检索一个项目,那么Set
就是您的选择。它将返回与谓词(块)匹配的第一个项目。请注意,d := set detect: [ :each | (each at: 'code') = '1243' ].
d. "a Dictionary('age'->'40' 'code'->'1243' )"
没有已定义的订单,因此如果您有多个匹配项,则可能会在不同时间返回不同的项。
select:
如果要检索与谓词匹配的多个项目,请使用multi := set select: [ :each | (each at: 'age') asNumber >= 35 ].
multi. "a Set(a Dictionary('age'->'40' 'code'->'1243' ) a Dictionary('age'->'35' 'code'->'7854' ))"
collect:
评论更新评论:
正如卡洛斯所说,codes := set collect: [ :each | each at: 'code' ].
会做你需要的。它将转换块应用于集合中的每个项目,然后返回结果集合。
#(2 3 4) collect: [ :each | each squared ] "#(4 9 16)"
适用于任何收藏品
@switch($message)
@case(Session::get('success'))
<div class="alert alert-success alert-block">
<strong>{!! $message !!}</strong>
</div>
@break
@case(Session::get('danger'))
<div class="alert alert-danger alert-block">
<strong>{!! $message !!}</strong>
</div>
@break
@default
<span>Something went wrong, please try again</span>
@endswitch
为了进一步推荐,我建议您阅读Pharo By Example书籍https://ci.inria.fr/pharo-contribution/job/UpdatedPharoByExample/lastSuccessfulBuild/artifact/book-result/Collections/Collections.html
中的收藏章节答案 1 :(得分:0)
mySet do: [:each | each do: [ :i | i doStuff ]]
或使用detect(我不确定检测是否像这样,我到目前为止从未使用过它):
mySet do: [:i | i detect: [ :each| (each at: 'key') doStuff ]].
或使用keysDo:
mySet do: [:each | each keysDo: [ :k | k doStuff ]]