我遇到这个相当频繁。我有一批数据(存储在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