Ist dies der beste Weg, um allgemeine Elemente aus einem Hash von Arrays zu holen?

Ich versuche, ein gemeinsames Element aus einer Gruppe von Arrays in Ruby zu erhalten. Normalerweise können Sie die& Operator zum Vergleichen von zwei Arrays, der Elemente zurückgibt, die in beiden Arrays vorhanden oder gemeinsam sind. Dies ist alles gut, außer wenn Sie versuchen, gemeinsame Elemente von mehr als zu erhaltenzwei Arrays. Ich möchte jedoch gemeinsame Elemente aus einemunbekannte, dynamische Anzahl von Arrays, die in einem Hash gespeichert sind.

Ich musste auf die eval () -Methode in Ruby zurückgreifen, die einen String als eigentlichen Code ausführt. Hier ist die Funktion, die ich geschrieben habe:

  def get_common_elements_for_hash_of_arrays(hash) # get an array of common elements contained in a hash of arrays, for every array in the hash.
       # ["1","2","3"] & ["2","4","5"] & ["2","5","6"] # => ["2"]
       # eval("[\"1\",\"2\",\"3\"] & [\"2\",\"4\",\"5\"] & [\"2\",\"5\",\"6\"]") # => ["2"]
       eval_string_array = Array.new # an array to store strings of Arrays, ie: "[\"2\",\"5\",\"6\"]", which we will join with & to get all common elements
       hash.each do |key, array|
          eval_string_array << array.inspect 
       end
       eval_string = eval_string_array.join(" & ") # create eval string delimited with a & so we can get common values 
       return eval(eval_string)
  end

example_hash = {:item_0 => ["1","2","3"], :item_1 => ["2","4","5"], :item_2 => ["2","5","6"] }
puts  get_common_elements_for_hash_of_arrays(example_hash) # => 2

Das funktioniert und ist großartig, aber ich frage mich ...Eval, wirklich? Ist das der beste Weg, es zu tun? Gibt es überhauptirgendein andere Wege, um dies zu erreichen (außer natürlich einer rekursiven Funktion). Wenn jemand irgendwelche Vorschläge hat, bin ich ganz Ohr.

Andernfalls können Sie diesen Code verwenden, wenn Sie ein gemeinsames Element oder Element aus einer Gruppe oder einem Hash von Arrays abrufen möchten. Dieser Code kann auch problemlos zum Durchsuchen eines Arrays von Arrays angepasst werden.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage