2014-07-17 159 views
-2

我有一個列表KeyValuePair,它是int和一個自定義對象Function。我也有一個函數ID列表。兩個列表都按字母順序排序。我需要將1列表中的函數ID與另一個列表中的函數ID進行匹配。所以,說看起來KVP的列表,如:如何從列表和鍵值對列表中創建詞典

1, (Function.name = foo, function.Id = 4) 
2, (Function.name = bar, function.Id = 7) 

而剛剛ID列表是:

142 
154 

我需要的字典:

{4, 142} 
{7, 154} 

左右的混搭兩個列表中的函數ID。

我該怎麼做?

這裏是我試過:

Dictionary<int, int> map = new Dictionary<int, int>(); 
    List<KeyValuePair<int, Function>> sorted = SortFunctions(); 

    IEnumerator sortEnum = sorted.GetEnumerator(); 
    IEnumerator dicEnum = FunctionIds.GetEnumerator(); 
    while ((sortEnum.MoveNext()) && (dicEnum.MoveNext())) 
    { 
     //Not sure what to do next? Just map[sortEnum.Next()] = dicEnum.Next()? 
    } 


    //Also was trying to use zip.. many many errors 
    List<string> sortedFuncs = sorted.ToList(); 
    Dictionary<int, int> map2 = functionIds.ToDictionary(x => x, x => sortedFuncs.Value.Id[functionIds.IndexOf(x)]); 
+4

爲什麼'{「Foo」,4}'與'142'匹配? – Servy

+1

這兩個收藏之間的關係並不完全清楚。邏輯是否簡單地通過索引進行鏈接,所以'sorted'中第三個位置的KVP與FunctionIDs中第三個位置的FunctionID匹配? –

回答

0

你應該能夠鏈ZipToDictionary

List<KeyValuePair<int, Function>> sorted = SortFunctions(); 

Dictionary<int, int> map2 = 
    sorted.Zip(FunctionIds, (s, i) => new {key = s.Value.Id, value = i}) 
      .ToDictionary(x => x.key, x => x.value); 

說明:

Zip列舉兩個表並創建一個由第Id組成的匿名類型中的KeyValuePair的和FunctionIds的整數。這些值存儲在匿名類型的keyvalue屬性中。

ToDictionary然後枚舉收集並創建使用keyvalue從匿名類型(x)的字典。

+0

你可以用我的變量再做一次嗎?我' – jcam77

+0

你可以再次使用我的變量嗎?我很困惑,因爲使用我的FunctionIds和sortedFuncs。謝謝! – jcam77

+0

@ jcam77我以爲'sorted'和'FunctionIds'_were_你的變量。 –