2013-11-15 38 views
0

我正在處理配置文件分析器,並且需要幫助將key:value對解析爲散列。我有數據的形式:key: value key2: value2 another_key: another_value將多個數組轉換爲單個散列

到目前爲止,我有代碼的

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

形式中的

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

形式如何可以把這些陣列整合到單個散列中的

形式返回一個數組
{key=>value, key2=>value2, another_key=>another_value} 

我不確定key:value對是否需要以字符串的形式存在。無論最簡單的工作。

感謝您的幫助!


這是我找到了解決辦法:這導致輸出{"key"=>"value"}, {"key2"=>"value2"}

+0

看一看[字符串#分區(http://ruby-doc.org/core-2.0.0/String.html#method-i -劃分)。這對於將每個字符串分割爲鍵和值,或者在冒號的每一邊使用具有捕獲組的正則表達式都是理想的。 –

+0

好啊,String#分區是一種有用的方法!謝謝@CarySwoveland –

回答

1

非常非常接近卡里的解決方案:

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

一個改進,因爲'delete'讀取比'gsub'更好。 –

+0

這就是爲什麼我仍然覺得值得添加。 – hirolau

+0

啊,誠實的代價。 :-) –

1

即使簡單

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

:是單個單詞

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

好的解決方案,我用這個想出了一些我自己的 –

1

假設的鍵和值,我可能會這樣做:

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

如果不是您正在查找的內容,您可以更改該正則表達式。

+0

謝謝@Nigel這個工程,但我寧願不處理RegEx –

相關問題