Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 通过将散列与两个单独的数组进行比较来迭代散列,并得到一个新的散列结果 数组1=7个元素 数组2=7个元素 散列=7个元素_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 通过将散列与两个单独的数组进行比较来迭代散列,并得到一个新的散列结果 数组1=7个元素 数组2=7个元素 散列=7个元素

Ruby on rails 通过将散列与两个单独的数组进行比较来迭代散列,并得到一个新的散列结果 数组1=7个元素 数组2=7个元素 散列=7个元素,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的要求是使用数组1和数组2中的每个元素遍历散列中的每个元素,并在应用所需逻辑后生成一个新的散列。比较总是在散列中的第一个元素与数组1中的第一个元素和数组2中的第一个元素之间进行,依此类推,直到我完成列表 我甚至不知道从何处开始以及如何开始,因此非常感谢您的帮助,让我开始使用您可以使用混合哈希和数组: hash = { key1: :value1, key2: :value2, key3: :value3 } array1 = %i(x1 x2 x3) array2 = %i(y1

我的要求是使用数组1和数组2中的每个元素遍历散列中的每个元素,并在应用所需逻辑后生成一个新的散列。比较总是在散列中的第一个元素与数组1中的第一个元素和数组2中的第一个元素之间进行,依此类推,直到我完成列表

我甚至不知道从何处开始以及如何开始,因此非常感谢您的帮助,让我开始使用

您可以使用混合哈希和数组:

hash = {
  key1: :value1,
  key2: :value2,
  key3: :value3
}

array1 = %i(x1 x2 x3)
array2 = %i(y1 y2 y3)

new_hash = {}
hash.to_a.zip(array1, array2).each do |(key, value), element1, element2|
  # logic with key, value, element1, and element2
  # basic example :
  new_hash[key] = [value, element1, element2]
end

p new_hash
# {:key1=>[:value1, :x1, :y1], :key2=>[:value2, :x2, :y2], :key3=>[:value3, :x3, :y3]}

这就是你要找的吗

arr1 = ['char', 'number', 'number', 'number', 'char', 'number', 'char']
arr2 = [6, '(7,0)','(15,0)','(5,0)',3,'(15,2)', 17]

h = { 'col1'=>'123456', 'col2'=>'0000111', 'col3'=>'000000002345',
      'col4'=>'00023',  'col5'=>'abc', 'col6'=>'00000000000052367',
      'col7'=>'0000000000321456' }

它使用的形式是,使用一个块来确定合并的两个哈希中存在的键的值,这里是哈希的所有键。

您确实需要显示哈希1、数组1和数组2的一些示例。数组1=['char'、'number'、'number'、'number'、'number'、'char'、'number'、'char']Array 2=[6、'7,0'、'15,0'、'5,0',3、'15,2',17]Hash={col1=123456,col2=0000111,col3=00000000 2345,col4=00023,col5=abc,col6=000000000000000000 52367,col7=0000000000 321456}请用正确语法的示例更新问题。请不要回答那些没有证明自己先尝试过的人的问题。堆栈溢出不是一个代码编写服务,它是一个多人需要的知识库。@QPaysTaxes。虽然我理解你的观点,也知道我的许多成员都同意你的观点,但我不同意你的观点,这主要是因为答案不仅仅针对提问者,而是针对每个阅读问题和答案的人。我倾向于在问题有趣和/或我认为我可以提供一个具有一般教育价值的答案时回答。然后,发布一个解释这个问题的答案。我知道你想做什么,但回答研究不足的问题并不是最好的方式——自我回答是专门存在的,因此你可以通过一个与任何特定问题或要求无关的一般性问题来进行教学,但让您演示和解释一类问题的特定解决方案。谢谢Cary,这非常有帮助。事实上,我得到的上述结果与您的示例中显示的结果完全相同。@Cary非常感谢Cary,这非常有帮助。事实上,我得到的上述结果与您的示例中显示的结果完全相同。enum=arr1.ziparr2.to_enum。但是,对于merge syntash.merge{|*,v |[v].concatenum.next},我得到了一个不同的结果。基本上,它返回3个元素的散列数组Array0-所有7个元素的散列数组1-‘CHAR’Array2-6。请不要回答那些没有证据表明他们先尝试过的人的问题。Stack Overflow不是一个代码编写服务,它是一个多人需要的知识库。
enum = arr1.zip(arr2).to_enum
  #=> #<Enumerator: [["char", 6], ["number", "(7,0)"], ["number", "(15,0)"],
  #     ["number", "(5,0)"], ["char", 3], ["number", "(15,2)"], ["char", 17]]:each>

h.merge(h) { |*,v| [v].concat(enum.next) }
  #=> {"col1"=>["123456", "char", 6], "col2"=>["0000111", "number", "(7,0)"],
  #    "col3"=>["000000002345", "number", "(15,0)"], "col4"=>["00023", "number", "(5,0)"],
  #    "col5"=>["abc", "char", 3], "col6"=>["00000000000052367", "number", "(15,2)"],
  #    "col7"=>["0000000000321456", "char", 17]}