我可以在另一个红宝石块内有红宝石块吗?

时间:2016-11-23 02:18:15

标签: ruby

我有一个哈希,其键是一系列整数(比如[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]}

感觉应该有更干的方法来实现这一目标。有任何想法吗?

2 个答案:

答案 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]}