Heute stellte sich mir zum zweiten Mal innert kurzer Zeit die aufgabe Elemente einer flachen Liste nach bestimmten Kriterien zu gruppieren. Da der Code dafür eher fehleranfällig ist, hatte ich mir vorgenommen die Sache wiederverwendbar zu implementieren. Dazu griff ich zunächst zu Ruby.
Die entstandene Funktion wird so verwendet, um eine Liste von Namen in eine Map zu überführen, die für jeden Anfangsbuchstaben eine Liste von Namen enthält:
require 'pp'
names = ["Felix","Alexey","Frank","Ivan","Irina"]
grouped_names = group(names) { |element|
element[0..0]
</blockquote> <code> } pp grouped_names
Die Ausgabe sieht ganz vernünftig aus:
{"A"=>["Alexey"], "F"=>["Felix", "Frank"], "I"=>["Ivan", "Irina"]}
Und nun zur Implementierung:
def group(list, &category)
map=Hash.new
list.each{|element|
cat=category.call(element)
if (map.has_key?(cat))
grp=map[cat]
else
grp=Array.new
map[cat]=grp;
end
grp< <(element);
}
return map
end
Ich fand’s so schön, dass ich beinahe weinen musste, aber nur beinahe.
Ich wurde allerdings gleich wieder wütend, als ich feststellte, dass ich bei WordPress nicht weiß, wie man code snippets einbindet…
Leave a Reply