我想從Ruby中的一組數組中獲取一個公共元素。通常情況下,您可以使用運算符來比較兩個數組,這兩個數組返回兩個數組中都存在或共同的數組。這一切都很好,除非你試圖從超過兩個陣列中獲取通用元素。但是,我想從未知的動態數組中獲取公共元素,這些元素存儲在散列中。這是從數組哈希中獲取常用元素的最佳方式嗎?
我不得不求助於在ruby中使用eval()方法,該方法將字符串作爲實際代碼執行。下面是我寫的函數:
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
這工作和是偉大的,但我不知道...... EVAL,真的嗎?這是最好的方法嗎?有沒有其他的方法可以完成這個任務(當然除了遞歸函數之外)。如果任何人有任何建議,我都耳熟能詳。
否則,如果您需要從一個組或數組哈希中獲取一個通用項目或元素,則可以隨意使用此代碼,此代碼也可以很容易地用於搜索數組數組。
不要忘了將您的問題標記爲已回答。 – 2010-03-26 21:18:30