2010-09-27 76 views
1

我有喜歡如何存儲從XML文件重複數據在C#

<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> 

一個XML文件,我需要將數據存儲在某種操作的任何臨時存儲(即Dictionary)。但我不能在這裏使用dictionary,因爲字典不支持相同的密鑰。任何人都可以建議我更好地存儲這些數據嗎?

回答

2

那麼,你可以使用Dictionary<int, List<int>>-或僅用於存儲(無變化),你可以使用LINQ的ToLookup方法,這將構建一個多爲您評估的地圖非常輕鬆。喜歡的東西(使用LINQ to 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); 
    } 
} 
+0

@Pramodh:我已經編輯了我的答案以舉例。 – 2010-09-27 10:10:33

+0

@ Jon Skeet:如果我使用LookUp,我如何得到val2的值(第四個元素,其中'val1'的值是'1','val2'的值是'4')。你可以請示例代碼解釋 - – 2010-09-27 10:12:47

+0

@Pramodh:嗯,我已經增加了一些信息 - 但不清楚這是否正是你想要的。 – 2010-09-27 10:31:00

0

您仍然可以使用字典中的val1值,只需將第二個值作爲值列表而不是僅列表。那麼只需檢查DataKey是否存在,如果它確實做了一個list.Add(val2)

1

如果.NET 4.0中,您可以使用Tuple<int, int>和List < Tuple < int,int >>如果數據不是鍵值對