루비에 관한 몇가지 질문...

leonid의 이미지

"12 5 777\n"과 같이 숫자들이 띄어쓰기로 구분되어있는 문자열을
[12, 5, 777]의 정수형 배열로 전환하려면

"12 5 777\n".split.map{|x|x.to_i}
=> [12, 5, 777]

이렇게 하면 되긴 되지만.. 이것 보다 더욱 짧은 식은 없을 까요?
(복잡하고 알아보기 힘든 거라도 상관없습니다.. 골프용이니.. :)

또한, 지금 보니 perl에는 이차원 배열을 $s로 바로 쓸 수 있어보이는데
(perl에 대해서 아무것도 모릅니다--)

루비에서는

a=Array.new(66){[]}

라던지
a=[];66.times{a<<[]}

등등의 방법밖에는 없는건가요?

루비 고수분들의 명쾌한 답변을 기다리겠습니다.. --a

hongminhee의 이미지

(잘못 썼네요. 아래 답글 봐주세요.)

hongminhee의 이미지

irb(main):001:0> [[]] * 66
=> [[], [], [], [], [], [], ..., [], [], [], [], []]

써보니까 너무 길어서 레이아웃을 망치길래 임의로 끊었습니다. ㅎㅎ

leonid의 이미지


그 방법도 있지만..

저 방법으로 할 경우, subarray들이 독립적으로 작동하지 않습니다..

예를 들어

a = [[]] * 66
=> [[],[],[],[], ... , []]
a[0]<<2
=> [2]
a
=> [[2],[2],[2],[2],...,[2]]

이런식으로 됩니다..

hongminhee의 이미지

아, 같은 하나의 객체에 대한 참조들이 나열되겠군요. 그걸 생각하지 못했네요. ㅎㅎ;