2016-04-11 3 views
-4

Ich versuche, einen Bereich und eine Anordnung zu kombinieren:einen String verketten es ein formua [sic] machen

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

letter_code einen Hash zu füllen. Es sollte wie folgt aussehen:

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

Dies ist mein Code: Buchstaben = "a" .. "c" code = [ "..--", "- ..", „--- - "] letter_code = {} x = 0

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

Warum die Verkettung eine leere Zeichenfolge zurückgibt?

+0

Sie verstehen vielleicht das Wort "verketten". – sawa

+1

@sawa 'puts" # {letter_code} "' druckt eine leere Zeichenfolge. :) –

+0

@SergioTulentsev Danke, ich habe es jetzt. Das OP verließ '{}' und es war verwirrend. – sawa

Antwort

0

Sie Code nicht funktioniert, weil String-Interpolation oder String-Verkettung Saiten erzeugt. Es wird die erstellte Zeichenfolge nicht magisch ausgewertet.

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

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

wow! Ich habe vorher keine .zip verwendet. – bscottyoung

0

Da

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

ist nichts letter_code tun:

Ich würde so etwas tun. Es wertet nur letters.to_a[x] und code[x] aus und interpoliert sie in einer Zeichenfolge. Daher bleibt letter_code als {} und {}.to_s, die puts Anrufe, ist eine leere Zeichenfolge.

Wenn Sie von dieser Linie letter_code ändern, ändern Sie es zu:

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

obwohl es immer noch eine schreckliche Code ist.

Verwandte Themen