2017-01-17 2 views
1

J'ai un stockage de valeur clé (dictionnaire) composée de:Un bon moyen de stocker la clé de plusieurs valeurs dans Pharo Smalltalk?

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

Je voudrais regrouper ces si les touches apparaissent une seule fois (tri des touches est en option) et les valeurs:

key1 value1, value4 
key2 value1 
key3 value3, value4 

La question: existe-t-il un moyen dédié de stocker le résultat?

Répondre

3

Géré pour le réparer. Utilisé un stockage de valeur de clé (dictionnaire) dont les clés sont key1, key2, key3 et les valeurs sont un ensemble (ou Array) de valeur1, valeur2, valeur3 etc.

Quelque chose le long de la ligne de:

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

Vous pouvez également utiliser '#groupedBy:', par exemple '{# key1 -> # valeur1. # key2 -> # value2. # key1 -> # value3. } groupedBy: # key' –

+1

aussi 'at: ifAbsentPut:' prend normalement un bloc comme deuxième argument, donc '[Set new]' ... donc l'ensemble est créé seulement si nécessaire –

+2

@Peter vous devez '(.. groupedBy: #key) collect: [: coll | coll collect: #value] ', ou vous allez vous retrouver avec un dictionnaire où les valeurs sont des collections d'associations – Uko