[英]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.