3 回答

TA貢獻1794條經(jīng)驗 獲得超8個贊
嘗試這個:
var orderOfDepts = new List<string> { "P", "A", "Z" };
var sortedList =
(
from x in myList
join dept in orderOfDepts.Select((name, index) => new { name, index }) on x.dept equals dept.name
orderby dept.index, x.order
select x
).ToList();
它應該是相當有效的。

TA貢獻1909條經(jīng)驗 獲得超7個贊
你可以這樣做
var result = _context.OrderBy(p => new { p.dept, p.order}).ToList();

TA貢獻1859條經(jīng)驗 獲得超6個贊
好吧,您可以使用排序規(guī)則創(chuàng)建一個列表:
var orderOfDepts = new List<string> { "P", "A", "Z" };
并使用該列表中元素的索引進行排序:
var sortedList = myList.OrderBy(x=> orderOfDepts.IndexOf(x.dept)).ThenBy(x=> x.order).ToList();
sortedListPS 如果集合不是太大,那么這個解決方案很好,但如果它很大或者orderOfDepts 列表中有很多排序規(guī)則,那么您可能希望將該算法的整體復雜性從 > 降低O(N2) 到接近 的程度O(N*logN)。
為此,我們可以利用Dictionary快速查找:
int o;
var orderOfDepts = new Dictionary<string, int>
{
{ "P", 0 },
{ "A", 1 },
{ "Z", 2 }
};
var sortedList = myList.OrderBy(x => orderOfDepts.TryGetValue(x.dept, out o) ? o : int.MaxValue)
.ThenBy(x=> x.order)
.ToList();
這里我們嘗試通過 key 從字典中獲取元素x.dept。如果我們沒有找到任何內容,我們會將該項放在列表的末尾,否則我們將使用字典中的值進行排序。
字典的查找時間復雜度為 O(1),因此它將極大地提高性能,但代價是構造字典對象所需的時間。對于少數(shù)元素,不建議這樣做,第一個解決方案更好,但對于大量數(shù)據(jù),這個解決方案很好。
- 3 回答
- 0 關注
- 250 瀏覽
添加回答
舉報