2014-09-03 66 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排序方法。