我有一个数组[5,2,6,4]
,我想创建一个结构,例如第一个减去第二个,直到最后一行。
我已经尝试过使用map,但是由于可能需要使用indx,因此不确定如何进行操作。
我想将结果存储在如下内容中:
{1 => (5, 2, 3), 2 =>(2,6,-4), 3 => (6,4,2)}
因此,x
数组应返回x-1
哈希。
有人知道该怎么办吗?应该是一个简单的。
谢谢。
答案 0 :(得分:3)
首先,您要成对使用数组元素:5,2
,2,6
,...,这意味着您想使用each_cons
:
a.each_cons(2) { |(e1, e2)| ... }
然后,您将希望索引获取1
,2
,...哈希键;建议将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}