2016-04-11 16 views
-4

Bir aralık ve bir dizi birleştirmek çalışıyorum yapmak için. Bu benim kodudurbir yani damardan [sic]

{"a" => "..--", "b" => "--..", "c" => "----"} 

: gibi görünmelidir harfler = "a" .. "c", kodu = [ "..--", "- ..", "--- - "] letter_code = {} x = 0

while x < letters.to_a.length 
    "letter_code[ #{letters.to_a[x]} ]=#{code[x]}" 
    x += 1 
end 
puts "#{letter_code}" 

Neden birleştirme boş bir dize döndürür geliyor?

+0

Belki de "birleştirme" kelimesini yanlış anlıyorsunuz. – sawa

+1

@sawa 'koyar" # {letter_code} "' boş bir dize yazdırır. :) –

+0

@SergioTulentsev Teşekkürler, şimdi anladım. OP '{}' bıraktı ve kafa karıştırıcıydı. – sawa

cevap

0

Kod çalışmıyor, çünkü dize enterpolasyonu veya dize birleştirme dizeleri oluşturur. Oluşturulan dizeyi sihirli olarak değerlendirmez.

Böyle bir şey yapacağını: letter_code için hiçbir şey yapmıyor

letters = "a".."c" 
code = ["..--", "--..", "----"] 

Hash[letters.zip(code)] 
#>= { "a" => "..--", "b" => "--..", "c" => "----" } 
+0

Vay! Daha önce kullanmadım. – bscottyoung

0

"letter_code[ #{letters.to_a[x]} ]=#{code[x]}" 

çünkü. Sadece letters.to_a[x] ve code[x] değerlerini değerlendirir ve bunları bir dizeye dönüştürür. Bu nedenle, letter_code, {} ve puts çağrılarının olduğu {}.to_s olarak kalır, boş bir dizedir. berbat bir kod olmasına rağmen

letter_code[letters.to_a[x]] = code[x] 

:

Eğer bu çizgi ile letter_code değiştirmek için değiştirmek istiyorsanız.