2017-05-11 104 views
-1

我有兩個列表,一個包含字符串數據,第二個包含一些索引號。通過索引列表在c中排序字符串列表#

List<int> myIndexList = new List<int>() {4, 3, 1, 2, 5, 0}; 
List<string> myValuesList = new List<string>() 
          {"Value 1", "Value 2", "Value 3", "Value 4", "Value 5", "Value 6"}; 

,我的結果必然是

值5值4值2值3值6值1

我怎麼能以最有效的方式呢?因爲這些列表可能包含許多項目

+8

Um,'myIndexList.Select(index => myValuesList [index])'?我不確定你是否錯過了這一點,或者是否有其他要求。 –

+1

你爲什麼不使用「字典」? –

+0

@ ertan2002你確定你想要的輸出是正確的嗎? –

回答

1

可以使用Zip

var zipped = myIndexList 
    .Zip(myValuesList, (i, j) => new { index = i, value = myValuesList[i] }) 
    .Select(i => i.value) 
    .ToList(); 

編輯做到這一點:

對於有效的方式,這是更好地遵循@喬恩飛碟雙向的評論。

+0

這裏沒有必要使用'Zip',只需一個Select就可以。看到我對評論的評論... –

+0

是的。你是對的。 –

1

通過獲取列表中項目的值並將其用作字符串列表中的迭代器來遍歷整數列表。

如何像:

List<int> myIndexList = new List<int>() { 4, 3, 1, 2, 5, 0 }; 
List<string> myValuesList = new List<string>() { "Value 1", "Value 2", "Value 3", "Value 4", "Value 5", "Value 6" }; 

foreach(var intItem in myIndexList) 
{ 
     //Do logic here 
     Console.WriteLine(myValuesList[intItem]); 
} 

我不知道,如果你想打印出來控制檯或什麼,但循環內可以執行任何你想要的邏輯。

3

認爲你只是想:

var orderedByIndexList = myIndexList.Select(index => myValuesList[index]); 

如果你需要它作爲一個List<T>,把.ToList()底。

注意這修改myValuesList - 它只是會在適當的順序序列。對於myIndexList也是不完整的,或者包含重複項:您將在輸出中以myValuesList結尾的「丟失」或「重複」值。