使用.map函数创建哈希

时间:2019-04-24 05:05:38

标签: ruby-on-rails

我有一个数组[5,2,6,4],我想创建一个结构,例如第一个减去第二个,直到最后一行。

我已经尝试过使用map,但是由于可能需要使用indx,因此不确定如何进行操作。

我想将结果存储在如下内容中:

{1 => (5, 2, 3), 2 =>(2,6,-4), 3 => (6,4,2)}

因此,x数组应返回x-1哈希。 有人知道该怎么办吗?应该是一个简单的。 谢谢。

3 个答案:

答案 0 :(得分:3)

首先,您要成对使用数组元素:5,22,6,...,这意味着您想使用each_cons

a.each_cons(2) { |(e1, e2)| ... }

然后,您将希望索引获取12,...哈希键;建议将Enumerator#with_index放入混音中:

a.each_cons(2).with_index { |(e1, e2), i| ... }

然后,您可以使用with_object来播放最后一块(哈希):

a.each_cons(2).with_index.with_object({}) { |((e1, e2), i), h| h[i + 1] = [e1, e2, e1 - e2] }

如果您认为该块参数中的所有括号都太吵了,那么您可以分步执行,而不是单行。

答案 1 :(得分:3)

您可以使用each_index

a = [5, 2, 6, 4]
h = {}
a[0..-2].each_index { |i| h[i+1] = [a[i], a[i+1], a[i] - a[i+1]] } 
h
 => {1=>[5, 2, 3], 2=>[2, 6, -4], 3=>[6, 4, 2]} 

答案 2 :(得分:1)

尝试使用

 each_with_index

假设您有一个数组:

arr = [3,[2,3],4,5]

并且您想使用hash(键值对)进行隐蔽。 “键”表示数组的索引,“值”表示数组的值。取一个空白哈希,并使用each_with_index进行迭代,然后将其推入哈希中,最后打印出哈希。

尝试一下:

hash={}

arr.each_with_index do |val, index|
    hash[index]=val
end

p hash

其输出将是:

{0=>3, 1=>[2, 3], 2=>4, 3=>5}

如果您希望该索引始终以1或2等开头,则使用

arr.each.with_index(1) do |val, index|
    hash[index] = val
end

输出将是:

{1=>3, 2=>[2, 3], 3=>4, 4=>5}