2012-04-16 52 views
1

我需要的是能夠將一個SortedList放入兩個非唯一字段的組合,但是這兩個字段(像數據庫組合鍵)。是否有等價於接受非唯一鍵的SortedList(字符串,字符串)

更多precisly,我有我的名單,我希望能夠用它

Dim myList = New Generic.SortedList(Of String, String) 
myList.add("aaa","aaa") 
myList.add("aaa","bbb") 
myList.add("bbb","bbb") 
myList.add("bbb","aaa") 

這樣做,因爲「具有相同鍵的項已存在」

這將拋出一個異常我知道我可以製作自己的對象和該對象的列表,但是有什麼已經存在的我想要做的事情?

感謝

+0

好,內置的是一個'Tuple',但它並沒有爲你處理比較。你將不得不自己上課。 – Ryan 2012-04-16 18:37:08

+0

從我看到的,我可以做一個'元組(字符串,字符串)',但我仍然需要做一個列表(我myTuple)' – Shadowxvii 2012-04-16 18:50:56

回答

3

你可以使用Lookup類。 Jon Skeet就這個問題提供了一個很好的答案。 c# duplicate Keys in .NET dictionaries?

首先必須將它們存儲在一個枚舉對象雖然IEnumerable(Of (Tuple(Of String,String))例如)

 Dim compositeKeys = New List(Of Tuple(Of String, String)) 
     compositeKeys.Add(New Tuple(Of String, String)("aaa", "aaa")) 
     compositeKeys.Add(New Tuple(Of String, String)("aaa", "bbb")) 
     compositeKeys.Add(New Tuple(Of String, String)("bbb", "aaa")) 
     compositeKeys.Add(New Tuple(Of String, String)("bbb", "bbb")) 

     Dim lookup = compositeKeys.ToLookup(Function(x) x.Item1) 
     Dim aaaKeys = lookup("aaa") // 2 hits 

對於一個特定的查找,總有LINQ

Dim specificLookup = lookup("aaa").Where(Function(x) x.Item2 = "bbb").FirstOrDefault 
+0

我能找到一個特定的數據元組嗎?假設我正在尋找(「aaa」,「bbb」)元組。 – Shadowxvii 2012-04-17 14:37:37

+0

您可以使用Linq進一步過濾。看我的編輯。 – Alex 2012-04-17 15:17:00

+0

好的,謝謝。但元組是4.0框架的一部分,所以我將無法使用它們。 – Shadowxvii 2012-04-17 18:15:33

相關問題