簡體   English   中英

我們如何迭代並選擇相集中的元素?

[英]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 ]]

檢出: http : //pharo.gforge.inria.fr/PBE1/PBE1ch10.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM