我有兩個列表。一個是動態的對象列表。另一個是字符串列表。我想根據另一個列表對對象列表進行排序。基於另一個列表對動態對象列表進行排序
List<dynamic> List1; // Object1,Object2,Object3,Object4
List <String> List2; //"abc","bcd","da"
這些對象具有必須對其進行排序的屬性「字母」之一。
對象可能不等於第二個列表中的元素數。
我有兩個列表。一個是動態的對象列表。另一個是字符串列表。我想根據另一個列表對對象列表進行排序。基於另一個列表對動態對象列表進行排序
List<dynamic> List1; // Object1,Object2,Object3,Object4
List <String> List2; //"abc","bcd","da"
這些對象具有必須對其進行排序的屬性「字母」之一。
對象可能不等於第二個列表中的元素數。
如果這兩個列表的索引與您希望的方式保持一致,那麼可能會發生這樣的情況。您必須確保列表具有相同的長度才能正常工作。
var result = list1
.Select((item, index) =>
new
{
Item = item,
Order = list2[index]
})
.OrderBy(x => x.Order)
.Select(x => x.Item);
如果它們長度不一樣,訂單的標準是什麼?那將是一個未定義的問題。一種方法是將它們放在列表的最後。
var result = list1.Take(list2.Length)
.Select((item, index) =>
new
{
Item = item,
Order = list2[index]
})
.OrderBy(x => x.Order)
.Select(x => x.Item);
var concatted = result.Concat(list1.Skip(list2.Length));
'list2 [index]' - 「對象可能不等於第二個列表中的元素數量。」根據OP的帖子。 –
一旦索引太大,這會拋出一個'IndexOutOfRange'。 OP聲明列表不等長。 –
在答案中註明。 – DLeh
好吧,假設列表1中包含對象的列表,每個對象包含稱爲「字母」的屬性,並且要排序的對象的這份名單中,但排序順序在列表2中指定其中有在排序順序字母的可能值,那麼你可以這樣做:那麼
int i=0;
var List2WithRowNum = from str2 in List2.AsEnumerable() select new{ rowNum = i++, str2 };
var sortedList = from obj1 in List1.AsEnumerable()
join strKey in List2WithRowNum.AsEnumerable() on ((listObject)obj1).alphabet equals strKey.str2
orderby strKey.rowNum
select obj1;
排序列表將是他們的「字母」屬性排序,列表2爲了您的原始對象(從列表1)的列表。
如果一個列表包含3個元素('List2'),另一個列表包含4個('List1'),則會很有趣:-) – xanatos
不確定您對此的期望如何,沒有多大意義。 –
這裏預計什麼*確切*排序會如何影響任何事情? –