2017-01-17 9 views
1

私は、キー値格納(辞書)で構成されます:Pharo Smalltalkでキーを複数の値に保存する良い方法はありますか?

key1 value1 
key2 value1 
key3 value3 
key1 value4 
key3 value4 
and so on 

キーを一度だけ(キーのソートはオプションです)と値現れるので、私はグループこれらしたい:

key1 value1, value4 
key2 value1 
key3 value3, value4 

質問:結果を保存する専用の方法はありますか?

答えて

3

これを修正することができます。キーはKEY1、KEY2、KEY3あるキー値格納(辞書)を使用し、値の線に沿って

何か等値1、値2、VALUE3のセット(又はアレイ)である:

keys do: [ :eachKey | (eachKey condition) ifTrue: [ 
    keyValueStorage at: eachKey ifAbsentPut: [ Set new. ] 
    (keyValueStorage at: eachKey) add: value. ] ] . 
+2

'#groupedBy:'を使うこともできます。 '{#key1 - >#value1。 #key2 - >#value2。 #key1 - >#value3。 } groupedBy:#key' –

+1

'at:ifAbsentPut:'は通常ブロックを2番目の引数として取るので、 '[Set new]' ...必要な場合にのみセットが生成されるようにする。 –

+2

@Peter you needed '(.. 。groupedBy:#key)collect:[:coll | coll collect:#value] '、または値がアソシエーションのコレクションである辞書になります。 – Uko

関連する問題