【发布时间】:2010-03-25 18:58:40
【问题描述】:
我正在尝试从 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
这很有效,而且很棒,但我想知道...评估,真的吗?这是最好的方法吗?是否还有任何其他方法可以实现这一点(当然,除了递归函数)。如果有人有任何建议,我会全力以赴。
否则,如果您需要从数组的组或哈希中获取公共项或元素,请随意使用此代码,此代码也可以轻松地用于搜索数组数组。
【问题讨论】:
-
不要忘记将您的问题标记为已回答。
标签: ruby