Rechenfrequenz von Termen in einem mehrdimensionalen Array in Ruby
-
25-09-2019 - |
Frage
Ich habe ein Array: Schlüssel = [[ "a", "a", "b"], [ "a", "b", "c"]] Ich brauche die Anzahl der "a", "b", "c" tritt in jedem Sub-Array von 'Schlüssel' zu finden.
Ausgabe könnte ein Hash sein: [ "a" => [2,1], "b" => [1,1], "c" => [0,1]]
Lösung
Vielleicht nicht die schnellste, aber wahrscheinlich zu den kürzesten:
Hash[
keys.flatten.uniq.map{|e|
[e, keys.map{|ar| ar.count(e)}]
}
]
=> {"a"=>[2, 1], "b"=>[1, 1], "c"=>[0, 1]}
oder
keys.flatten.uniq.inject({}){|acc,e|
acc.merge({e => keys.map{|ar| ar.count(e)}})
}
Hier ist ein Schuss auf 1.8.6 Version:
keys.flatten.uniq.inject({}){|acc,e|
acc[e] = keys.map{|ar|
ar.select{|c| c==e}.size
}
acc
}
Aber Sie würden besser bald, dass updates Juwel bekommen ...;)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow