2013-11-15 10 views
0

저는 구성 파일 파서에서 작업 중이므로, key : value 쌍을 해시로 파싱하는 데 도움이 필요합니다.여러 배열을 단일 해시로 변환

데이터 형식은 key: value key2: value2 another_key: another_value입니다.

지금까지 내가

의 형태로 하나의 해시에 이러한 배열을 설정할 수 있습니다 어떻게

["key:value"]["key2: value2"]["another_key: another_value"] 

의 형태로 배열을 반환

line = line.strip!.split(':\s+') 

의 형태로 코드를

{key=>value, key2=>value2, another_key=>another_value} 

key : value 쌍이 문자열 형식인지 여부는 확실하지 않습니다. 무엇이든 가장 쉽게 작업 할 수 있습니다.

도움 주셔서 감사합니다.

line = line.strip.split(':') 
    hash = Hash[*line] 

출력 {"key"=>"value"}, {"key2"=>"value2"}

+0

[문자열 # 파티션 (에서보세요 http://ruby-doc.org/core-2.0.0/String.html#method-i -분할). 그것은 각 문자열을 키와 값으로 나누거나 콜론의 각면에있는 캡쳐 그룹과 함께 정규 표현식을 사용하는 데 이상적입니다. –

+0

Ah nice, String # 파티션은 유용한 방법입니다! 고마워요 @CarySwoveland –

답변

1

캐리의 솔루션에 매우 가까이 :

Hash[*line.delete(':').split] 
+0

을 개선하지 못했습니다. 왜냐하면'delete'가'gsub'보다 더 읽기 쉽기 때문입니다. –

+0

그래서 나는 아직도 그것이 가치가 있다고 느꼈다. – hirolau

+0

아, 정직한 대가. :-) –

1

더 간단한 결과 :


이것은 내가 찾은 솔루션을 하나의 단어가

Hash[*line.gsub(':',' ').split] 
    # => {"key"=>"value", "key2"=>"value2", "another_key"=>"another_value"} 
+0

좋은 솔루션, 나는 내 자신의 무언가를 생각해 내기 위해 이것을 사용했습니다. –

1

키와 값을 가정이, 아마도 다음과 같이 할 것입니다 :

Hash[line.scan(/(\w+):\s?(\w+)/)] 

당신이 찾고있는 것과 다르다면 정규식을 바꿀 수 있습니다.

+0

감사합니다. @ Nigel이 작동하지만, RegEx –

관련 문제