2016-11-23 27 views
-4

私は、整数の範囲のキー(例えば[1..5])とその対応する5つの値がすべてnilであるハッシュを持っています。私は整数の配列を持っています([1,2,3,4,5]と言うことができます。私がやりたいことは非常に具体的です:すべての単一のキーを取り、それを配列要素のすべてに追加して元のキーを持つハッシュを与えたい値のために今全体のシフト配列を持っている。別のルビーブロックの中にルビブロックを置くことはできますか?

をシャドーイング文を.eachにつながっているので、私はこれは本当に簡潔な表現によっては不可能であると結論している数時間を過ごした後。

私だけだと思います方法はほぼ同じ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]} 

これを達成するために、よりDRYな方法があるはずのようにそれは感じています。何か案は?

答えて

2

で例えば

h = {} 
(1..5).each{|i| h[i] = [1,2,3,4,5].map{|j| j+i}} 

結果:

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

(ただし、ご質問がの場合、初期条件はとなる場合があります。もしそうなら、私はそれを理解せず、私はそれについて心配しなかった。私はちょうどに行ったものから始めて、あなたの初期条件になり、あなたの望む結果に終わりました。)

+0

ねえ、それは動作します!しかし、あなたは本当に別のブロックの中にブロックを持つことができますか?私はスタックに投稿する前にこれを昨日書き始めましたが、私は文をシャドーイングすることについて警告するテキストエディタを持っていて、私は夢中になりました。正直言って私は少しdownvoteに驚いています..私はスタックのオーバーフローでもっと多くの初心者の質問を見た。とにかく、ありがとう。 – alexandros84

+0

ねえ、私もこれを知っていませんでした! – alexandros84

0

は、なぜあなたはrng範囲であるとaryが配列のどこに動作するはずです。この

h = {} 
rng.each{|i| h[i] = ary.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]} 
+0

私がこの例で与えたハッシュは単なる例です!それらの構造は単純さのためだけのやり方です。とにかくおかげありがとう。 – alexandros84

関連する問題