這是可行的,但前提是order
列表大小相同ptdPoints
列表:
List<int> order = new List<int>() { 1, 9, 3 };
List<PointF> ptdPoints = new List<PointF>() { new PointF(20, 10), new PointF(10, 80), new PointF(60, 30) };
var result = order.Zip(ptdPoints, (left, right) => new {left, right})
.OrderBy(a => a.left)
.Select(a => a.right)
.ToList();
你basicaly將兩個列表合併爲一個匿名對象,對第一個列表的元素進行排序並僅輸出第二個列表。請注意,這將不是更改原始列表。
編輯:有關如何這項工作,你可以讀了these entries on LINQ細節,這一項就Zip。
order.Zip(ptdPoints, (left, right) => new {left, right})
這條線將採取order
列表中,和「拉鍊」以有序的方式(這意味着與第一的第二等的第一列表的第一元素)。 (left, right) => new {left, right}
是一個匿名函數,它從第一個列表(left
)和第二個列表(right
)的元素中獲取一個元素,並輸出一個新的匿名對象,其中包含兩個成員:int left
和PointF right
。
.OrderBy(a => a.left)
OrderBy
指定要執行哪個對象屬性。在第一行之後,函數a => a.left
的輸入將是之前創建的匿名對象。然後我們說:從這些元素中,根據left
屬性對它們進行排序。由於這是一個加入你的觀點和你的原始整數的匿名對象,所以對匿名對象上的整數進行排序將根據整數對點進行排序。
.Select(a => a.right)
Select
將對象投影到另一個對象中。該行說:從現在開始,我只想操作匿名對象的right
屬性中的對象,必須將您的匿名對象投影到您的原始PointF
列表中。
下一步是從這個序列創建一個新的列表。
列表2與1無關? – Sayse
我想對第一個列表進行排序,並且相應的列表也應按照相同的順序排序 –
是順序只是y值的順序? – Sayse