2016-10-14 2 views
0

분실되었습니다. 나는 그 결과이 같은해야 1에서 10까지 숫자에 해당하는 키 해시를 만들어야합니다특정 키가있는 해시 만들기에 대해

my_hash = {1 => "", 2 => "", 3 => ""...} 

나는

h = Hash.new 

나에게 것을 수행하는 하나 이상의 방법을 제공하시기 바랍니다가 , 나중에 "값"이 필요할 것입니다. 왜냐하면 키가있는 해시가 필요하기 때문에 나중에 값을 푸시 할 것입니다. 감사!

(1..10).map { |x| [x, ''] }.to_h 

또는 :

+0

미안하지만 해시, 값 없음, 키 없음. 나중에 값을 변경할 수는 있지만 해시에 매달린 불모의 키를 가질 수는 없습니다. 'keys = [1,2,3]', 아마도'h = keys.product (''). to_h # => {1 => "", 2 => "", 3 => ""}'. 추가 할 키 - 값 쌍이 하나 이상있을 때 해시를 만드는 것과는 달리 해시가 필요한지 다시 고려해야합니다. –

+0

죄송합니다. 간단한 질문으로 불만을 토로했습니다. 다른 입력에 따라 가변 길이로이 해시가 필요하지만 항상 정수로 정렬됩니다. 고마워요 – clonecq

+0

와우! 이전의 코멘트에서 나는 keys.product ([ ''])'를 의미했습니다. –

답변

1
h = Hash.new 
(1..10).each {|count| h[count] = ''} 
+0

정확하게 필요한 것을 고맙습니다. 나는 '.upto'와 'for'와 같은 다른 루프를 시도했지만 어떻게 든 그것을 제대로 처리 할 수 ​​없었다. – clonecq

1

무엇에 대한

{}.tap { |h| 1.step(10) { |i| h[i] = '' } } 

또는 :

(1..10).zip(Array.new(10) { '' }).to_h 
+0

모두 작동하며 모든 키는 숫자 순서입니다. 위대한 모범이지만 나는 그것을 이해하기 위해 그들을 연구해야 할 것입니다! 루비는 놀랍습니다! – clonecq

1

몇 가지 더 많은 옵션 :

(1..10).each_with_object({}) { |i, h| h[i] = '' } 
10.times.each_with_object({}) { |i, h| h[i + 1] = '' } 
1.upto(10).each_with_object({}) { |i, h| h[i] = '' } 

# Or if you think each_with_object is heresy... 
(1..10).inject({}) { |h, i| h.merge!(i => '') } # merge! to avoid wasteful copying 
10.times.inject({}) { |h, i| h.merge!(i + 1 => '') } 
1.upto(10).inject({}) { |h, i| h.merge!(i => '') } 
관련 문제