Generische Programmierung

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…



Posted

in

,

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.