我遇到這個相當頻繁。我有一批數據(存儲在CSV,XML,沒關係)在某些版本的格式:重組數據從平面文件到散列鍵的算法
key1|value1
key1|value2
key1|value3
key2|value4
key2|value5
etc.
,需要能夠處理它以這種形式:
data[key1] => [value1, value2, value3]
data[key2] => [value4, value5]
etc.
從A轉換到B的最佳方法是什麼?我通常像這樣(僞代碼)循環遍歷列表,但我不喜歡我必須重複我的數組構建代碼。
data = []
values = []
currentKey = ""
foreach (line in inputData) {
key, value = split(line)
if ((currentKey != "") and (currentKey != key)) {
data[currentKey] = values
values = []
}
currentKey = key
values.add(value)
}
// this is the part I don't like, but it's necessary to capture the last group
data[currentKey] = values
我特別沒有命名語言,因爲我必須至少在Javascript,C#,Perl和PHP中這樣做。如果有特定語言的解決方案會很棒,但我真的在尋找最高效的通用算法方法。
你的算法使用的值是按鍵分組的事實。實際上,你可以避免這種情況,使代碼更清晰:if(!(key in dictionary))dictionary.add(key,empty);字典[key] .add(value) – Vlad 2012-08-02 17:03:25
我認爲在簡化問題時我丟失了一個重要的部分,這就是我經常需要在將數據放入數據之前收集所有的值[currentKey] - 有時它是一個SQL調用或我正在寫出一個文件。我認爲更大的問題是,我試圖通過結合閱讀和寫作來變得可愛,並且應該循環以解析一次,然後循環解析的數據以創建輸出。 – 2012-08-03 05:56:56