2010-02-22 13 views
2

배열로 변환하려는 배열이 포함 된 문자열이 있습니다. 어떻게 할거 니?배열을 포함하는 문자열을 Ruby의 배열로 변환

나는이를 변환 할이 속으로

myvar= 
"[[Date.UTC(2010, 0, 23),0],[Date.UTC(2010, 0, 24),0],[Date.UTC(2010, 0, 25),3],[Date.UTC(2010, 0, 26),0],[Date.UTC(2010, 0, 27),0],[Date.UTC(2010, 0, 28),0],[Date.UTC(2010, 0, 29),0],[Date.UTC(2010, 0, 30),0],[Date.UTC(2010, 0, 31),0],[Date.UTC(2010, 1, 01),0],[Date.UTC(2010, 1, 02),0],[Date.UTC(2010, 1, 03),1],[Date.UTC(2010, 1, 04),2],[Date.UTC(2010, 1, 05),0],[Date.UTC(2010, 1, 06),0],[Date.UTC(2010, 1, 07),0],[Date.UTC(2010, 1, 08),0],[Date.UTC(2010, 1, 09),0],[Date.UTC(2010, 1, 10),0],[Date.UTC(2010, 1, 11),0],[Date.UTC(2010, 1, 12),0],[Date.UTC(2010, 1, 13),0],[Date.UTC(2010, 1, 14),0],[Date.UTC(2010, 1, 15),0],[Date.UTC(2010, 1, 16),0],[Date.UTC(2010, 1, 17),0],[Date.UTC(2010, 1, 18),0],[Date.UTC(2010, 1, 19),0],[Date.UTC(2010, 1, 20),0],[Date.UTC(2010, 1, 21),0]]" 
myvar.class 
>>string 

:

myvar = 
[[Date.UTC(2010, 0, 23),0],[Date.UTC(2010, 0, 24),0],[Date.UTC(2010, 0, 25),3],[Date.UTC(2010, 0, 26),0],[Date.UTC(2010, 0, 27),0],[Date.UTC(2010, 0, 28),0],[Date.UTC(2010, 0, 29),0],[Date.UTC(2010, 0, 30),0],[Date.UTC(2010, 0, 31),0],[Date.UTC(2010, 1, 01),0],[Date.UTC(2010, 1, 02),0],[Date.UTC(2010, 1, 03),1],[Date.UTC(2010, 1, 04),2],[Date.UTC(2010, 1, 05),0],[Date.UTC(2010, 1, 06),0],[Date.UTC(2010, 1, 07),0],[Date.UTC(2010, 1, 08),0],[Date.UTC(2010, 1, 09),0],[Date.UTC(2010, 1, 10),0],[Date.UTC(2010, 1, 11),0],[Date.UTC(2010, 1, 12),0],[Date.UTC(2010, 1, 13),0],[Date.UTC(2010, 1, 14),0],[Date.UTC(2010, 1, 15),0],[Date.UTC(2010, 1, 16),0],[Date.UTC(2010, 1, 17),0],[Date.UTC(2010, 1, 18),0],[Date.UTC(2010, 1, 19),0],[Date.UTC(2010, 1, 20),0],[Date.UTC(2010, 1, 21),0]] 
myvar.class 
>>Array 

답변

2

명백한 대답은 eval을 포함하지만,이 위험하다. 대신 구문 분석을 권장합니다. 이 꽤 잘 정의 된 데이터 형식 (보인다)이기 때문에, 당신이 사용할 수 있습니다

myvar.scan(/\d+/).map(&:to_i).each_slice(4).map{|*x,y| [Date.UTC(*x), y]} 

을이

  • 모든 숫자를 끌어
  • 별도의 정수로 변환 4 그룹으로
  • 첫 번째부터 세 번째 인수로 Date.UTC에 각 그룹의 처음 세 개를 적용합니다.
  • 쌍 eac h 날짜가 해당하는 y
  • 인 모든 쌍을 포함하는 배열을 만듭니다.

나는 Date.UTC 메서드가 없지만 사용자 지정 메서드가 있다고 가정합니다.

+0

흠 ... 그래서 Date.UTC는 실제로 자바에서 루비의 함수가 아니라 HTML에 삽입하려고하는 자바 스크립트 함수입니다. 귀하의 솔루션은 기술적으로 정확하지만 루비는 날짜가 없으므로 오류가 발생합니다. 오 잘 ... 정보 주셔서 감사합니다, 나는 나중에 그것을 사용할 가능성이 높습니다. – Schneems

0

는 평가 명령을

X = 평가 ("[\"푸 \ "\"바 \ "\"랜드 \ "]") => [ "foo에"

을 시도 "바", "랜드"] X

=> [ "foo에", "바", "랜드"]

이지만 평가가된다 DA

nger을 사용할 때주의하십시오.

관련 문제