簡體   English   中英

如何排序清單 <int> 使用另一個列表 <int> ?

[英]How can I Sort a List<int> using another List<int>?

我需要使用另一個列表對列表進行排序。 我正在嘗試使用:

var docsIds = new List<int>() { 1, 7, 4 };
var tileSizes = new List<int>();
tileSizes = tileSizes.OrderBy(x => docsIds.IndexOf());

輸入:1,2,3,4,5,6,7

預期輸出:1,7,4,2,3,5,6

任何幫助表示贊賞。

假設tileSizes僅具有從docIds選擇的值(這似乎是有意圖的,盡管問題尚不清楚),然后缺少的部分是IndexOf()的參數,尤其是IndexOf(x)

然后, IndexOf()返回一個整數,顯示該值在docIds的位置,並且OrderBy()可以在排序中使用該值。

啊對。 而且OrderBy()不返回List ,而是返回Enumerable ,因此最后需要一個ToList() 將所有內容放在一起,您的最后一行應該類似於...

tileSizes = tileSizes.OrderBy(x => docsIds.IndexOf(x)).ToList();

我通常更喜歡手動操作,因此有解決方案:

List<int> randomItems = new List<int>(){1,2,3,4,5,6,7};
List<int> outputOrder = new List<int>(){0,6,3,1,2,4,5};
List<int> resultList = new List<int>();

foreach(int order in outputOrder)
{
    resultList.Add(randomItems[order]);
}

編輯以復制OP值

resultList將包含:1,7,4,2,3,5,6

另外,您也可以像這樣輸出outputOrder:

List<int> outputOrder = new List<int>(){1,7,4,2,3,5,6};

只需將循環指令更改為:

resultList.Add(randomItems[order--]);

結果將是相同的。

如果tileSizes是不同的並且始終包含所有docsIds ,則Union可以用於O(n)復雜度:

tileSizes = docsIds.Union(tileSizes).ToList();        // { 1, 7, 4, 2, 3, 5, 6 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM