2014-09-03 68 views
-1

我想排序列表(這個Point3D是一個Rhino庫類)。我想與之前最小的X點,但我需要他們是否有例如我有同樣的X.這點由最小Ÿ排序:排序列表中的點C#

Point 1: X = 2; Y = 1 
Point 2: X = 4; Y = 2 
Point 3: X = 4; Y = 1 
Point 4: X = 3; Y = 8 
Point 5: X = 2; Y = 6 
Point 6: X = 2; Y = 4 

,我想擁有的順序是即:

Point 1: X = 2; Y = 1 
Point 6: X = 2; Y = 4 
Point 5: X = 2; Y = 6 
Point 4: X = 3; Y = 8 
Point 3: X = 4; Y = 1 
Point 2: X = 4; Y = 2 

我用這個簡單的代碼:

myPointList.sort(); 

但我有一個訂單,這不是正確的,因爲我不得不刪除一些這點,如果他們有爲了我想,我是激發正確的觀點,但我刪除了我不想擦除的正確內容。

有人可以幫我嗎?

非常感謝!

+0

爲什麼倒票? – Alex 2014-09-03 07:00:44

+0

http://stackoverflow.com/questions/3163922/sort-a-custom-class-listt – 2014-09-03 07:01:30

+0

爲了將來的參考 - downvotes可能是由於非常廣泛的「秩序是不正確的」和缺乏搜索努力像http:// www.bing.com/search?q=c%23+sort+list+two+properties ... – 2014-09-03 07:26:14

回答

2

使用LINQ:

Points.OrderBy(p => p.X).ThenBy(p => p.Y) 
+0

什麼是p?我只有我的名單 ...我應該像PointList.OrderBy(PointList => PointList [i] .X).ThenBy(PointList => PointList [i] .Y)? – Imrik 2014-09-03 07:21:57

+0

p是lambda表達式中的一個變量名,所以只要它是唯一的,它的名稱並不重要。您可以參考「p」,就好像您正在查看單個Point3d一樣,因此您可以直接訪問它的屬性。 – 2014-09-03 07:24:54

+0

不要忘記使用System.Linq添加; – 2014-09-03 07:26:08

1

您可能需要稍微修改這一點,但這個想法是通過x和y

var sortedList = PointList.OrderBy(p => p.X) 
          .ThenBy(p => p.Y) 
          .ToList(); 
+0

你能告訴我什麼是p?對不起 – Imrik 2014-09-03 07:24:11

+0

@Imrik - p只代表lambda表達式的一個點,它有點像一個臨時變量 – Sayse 2014-09-03 07:25:38

0

你需要實現一個自定義比較,並把它作爲一個命令,然後參數cu排序方法。