gpt4 book ai didi

ruby - 这是从数组哈希中获取公共(public)元素的最佳方法吗?

转载 作者:数据小太阳 更新时间:2023-10-29 07:21:16 26 4
gpt4 key购买 nike

我正在尝试从 Ruby 中的一组数组中获取一个公共(public)元素。通常,您可以使用& 运算符比较两个数组,返回两个数组中存在或共有的元素。这一切都很好,除非您试图从超过两个 数组中获取公共(public)元素。但是,我想从一个未知的、动态数量的数组中获取公共(public)元素,这些元素存储在散列中。

我不得不求助于使用 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

这行得通而且很棒,但我想知道...评估,真的吗?这是最好的方法吗?甚至还有任何其他方法来完成此操作(当然,除了递归函数之外)。如果有人有任何建议,我会洗耳恭听。

否则,如果您需要从数组的组或散列中获取公共(public)项目或元素,请随意使用此代码,此代码也可以轻松地适用于搜索数组的数组。

最佳答案

看看 inject 的威力吧! ;)

[[1,2,3],[1,3,5],[1,5,6]].inject(&:&)
=> [1]

正如 Jordan 所提到的,如果您的 Ruby 版本不支持 &-notation,只需使用

inject{|acc,elem| acc & elem}

关于ruby - 这是从数组哈希中获取公共(public)元素的最佳方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2518507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com