[英]How do we iterate and select an element of a set in pharo?
我的收藏集是一個Set,其中包含許多詞典。 如何遍歷Set中的每個字典以選擇特定鍵。
a Set(a Dictionary('age'->'25' 'code'->2512) a Dictionary('age'->'40' 'code'->'1243') a Dictionary('age'->'35' 'code'->'7854'))
set := {
{ 'age'->'25'. 'code'->'2512' } asDictionary .
{ 'age'->'40'. 'code'->'1243' } asDictionary.
{ 'age'->'35'. 'code'->'7854' } asDictionary.
} asSet.
如果您只想檢索一個項目,請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' ))"
從評論更新以發表評論:
正如卡洛斯(Carlos)所述, collect:
將做您需要的事情。 它將轉換塊應用於集合中的每個項目,然后返回結果集合。
codes := set collect: [ :each | each at: 'code' ].
適用於任何收藏
#(2 3 4) collect: [ :each | each squared ] "#(4 9 16)"
如需進一步了解,我建議您仔細閱讀“法魯示例”一書中的“收藏”一章https://ci.inria.fr/pharo-contribution/job/UpdatedPharoByExample/lastSuccessfulBuild/artifact/book-result/Collections/Collections.html
mySet do: [:each | each do: [ :i | i doStuff ]]
或使用檢測(我不確定檢測是否能像這樣工作,到目前為止我從未使用過):
mySet do: [:i | i detect: [ :each| (each at: 'key') doStuff ]].
或使用按鍵
mySet do: [:each | each keysDo: [ :k | k doStuff ]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.