代码之家  ›  专栏  ›  技术社区  ›  Thorin Oakenshield

如何用C语言存储xml文件中的重复数据#

  •  1
  • Thorin Oakenshield  · 技术社区  · 15 年前

    <Root>
     <Child val1="1" Val2="0"/>
     <Child val1="1" Val2="2"/>
     <Child val1="1" Val2="3"/>
     <Child val1="1" Val2="4"/>
     <Child val1="1" Val2="5"/>
     <Child val1="6" Val2="0"/>
     <Child val1="7" Val2="0"/>
    </Root>
    

    我需要将数据存储在任何临时存储器(即 Dictionary dictionary 因为字典不支持相同的键。有谁能给我一个更好的方法来存储这些数据吗?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Jon Skeet    15 年前

    Dictionary<int, List<int>> -或者仅用于存储(无更改),您可以使用LINQ ToLookup 方法,它将为您建立一个多值映射非常容易。类似于(使用LINQ到XML):

    var lookup = doc.Descendants("Child")
                    .ToLookup(x => (int) x.Attribute("val1"),
                              x => (int) x.Attribute("val2"));
    
    // Will iterate 5 times, printing 0, 2, 3, 4, 5 
    foreach (var value in lookup[1])
    {
        Console.WriteLine(value); 
    }
    

    编辑:显示 全部的 信息,你可以这样做:

    foreach (var grouping in lookup)
    {
        foreach (var value in grouping)
        {
            Console.WriteLine("{0} {1}", grouping.Key, value);
        }
    }
    
        2
  •  1
  •   veggerby    15 年前
        3
  •  0
  •   Mauro    15 年前

    您仍然可以为val1值使用字典,只需将第二个值设置为值列表,而不只是列表。然后简单地检查DataKey是否存在,如果它确实执行了列表。添加(值2)