2017-09-17 1 views
2

한 번에 한 문자열을 다른 한 글자로 변경하는 메서드를 작성하려고합니다. 그러나 나는 루비에서 문자열 변수를 배열에 푸시하면 문자열 변수의 주소가 아닌 문자열을 푸는 것으로 나타났습니다.문자열을 루비의 배열로 저장

def mutate_my_strings(s1,s2) 
    #your code here 

    str1 = s1.to_s 
    str2 = s2.chars 
    ret = [] 

    puts str1 
    ret.push(str1) 

    s1.chars.each_with_index do |q,idx| 
    str1[idx] = str2.shift  
    ret.push(str1) 
    end 
    return ret.join("\n") 
end 

mutate_my_strings("bubble gum", "turtle ham") 

이 출력이 열거는 STR1하지만 둔다 문자열 "풍선 껌", "거북 햄"로 턴 아웃을 수정하는 것을 보여준다이 배열 그렇지 않다. 추가

bubble gum 
"tubble gum" 
"tubble gum" 
"turble gum" 
"turtle gum" 
"turtle gum" 
"turtle gum" 
"turtle gum" 
"turtle hum" 
"turtle ham" 
"turtle ham" 
=> "turtle ham\nturtle ham\nturtle ham\nturtle ham\nturtle ham\nturtle ham\nturtle ham\nturtle ham\nturtle ham\nturtle ham\nturtle ham" 

답변

1

새로운 문자열을 만들 ret.push(str1.dup)ret.push(str1) 교체 매 시각. 잘 했어

def mutate_strings(s1, s2) 
    (0...s1.size).map { |i| s2[0..i] + s1[i+1..-1] }.join("\n") 
end 

puts(mutate_strings('bubble gum', 'turtle ham')) 
+0

: 여기

그리고

문제에 더 우아한 솔루션입니다. 내 버전은 매우 유사했지만 너무 늦었습니다. –

+0

@ EricDuminil 네, 보았습니다. 좋은 걸 보았습니다.) –

+0

내가 생각하지 못한 것을 가르쳐 주신 것을 놀라게했습니다. –

0

내가 그것을 해결 : 전체 문자열 배열의 수정

ret.push(str1) to 
ret.push(str1 * 1) 

이 새로운 포인터를 만들고 모든 반복

관련 문제