我有一个哈希,其键是一系列整数(比如[1..5]
),其相应的5个值都是nil
。我还有一个整数数组(比如[1,2,3,4,5]
。我想要做的是非常具体的:我想把每一个键都添加到每个数组元素中,给我一个哈希值原始键,但现在已经为整个移位数组的值。
花了几个小时后,我得出的结论是,通过一个非常简洁的表达,这是不可能的,因为它导致了每个阴影陈述。
我认为解决这个问题的唯一方法是创建5个几乎相同的方法并分别调用它们。
def a1
array.each do |x|
x+1
end
end
def a2
array.each do |x|
x+2
end
end
依旧......
我想要实现的最终产品是:
{1=>[2,3,4,5,6],2=>[3,4,5,6,7],3=>[4,5,6,7,8],4=>[5,6,7,8,9],5=>[6,7,8,9,10]}
感觉应该有更干的方法来实现这一目标。有任何想法吗?
答案 0 :(得分:2)
假设这些初始条件:
h = {1=>nil, 2=>nil, 3=>nil, 4=>nil, 5=>nil}
arr = [1,2,3,4,5]
......非常简单:
h.keys.each do |key|
h[key] = arr.map {|i| i+key}
end
# h is now: {1=>[2, 3, 4, 5, 6], 2=>[3, 4, 5, 6, 7], 3=>[4, 5, 6, 7, 8], 4=>[5, 6, 7, 8, 9], 5=>[6, 7, 8, 9, 10]}
(但是,你的问题可能是关于实现初始条件。如果是这样,我没有理解,我并不担心它;我刚刚开始我 你的初始条件,最终得到了你想要的结果。)
答案 1 :(得分:0)
为什么不这样做
h = {}
rng.each{|i| h[i] = ary.map{|j| j + i}}
这应该适用于rng
是范围且ary
是数组的情况。
例如
h = {}
(1..5).each{|i| h[i] = [1,2,3,4,5].map{|j| j+i}}
结果
h = {1=>[2, 3, 4, 5, 6], 2=>[3, 4, 5, 6, 7], 3=>[4, 5, 6, 7, 8], 4=>[5, 6, 7, 8, 9], 5=>[6, 7, 8, 9, 10]}