我想对类对象列表进行排序。
class tocka
{
Point t;
double kut;
int redkotiranja;
public tocka(Point _t, double _kut, int _redkotiranja)
{
t = _t;
kut = _kut;
redkotiranja = _redkotiranja;
}
}
以下是清单:
List<tocka> tocke= new List<tocka>();
tocka a = new tocka(new Point(0, 1), 10, 1);
tocke.Add(a);
tocka b = new tocka(new Point(5, 1), 10, 1);
tocke.Add(b);
tocka c = new tocka(new Point(2, 1), 10, 1);
tocke.Add(c);
tocka d = new tocka(new Point(1, 1), 10, 1);
tocke.Add(d);
tocka ee = new tocka(new Point(9, 1), 10, 1);
tocke.Add(ee);
我希望按tocke
t.X
进行排序
我是如何在C#中做到的?
答案 0 :(得分:3)
使用LINQ:
tocke = tocke.OrderBy(x=> x.t.X).ToList();
公开t
。
答案 1 :(得分:1)
没有LINQ的直接解决方案(只是列表排序,没有额外的列表创建)。
提供t
公开:
tocke.Sort((left, right) => left.t.X - right.t.X);
但恕我直言,最好的方法是让class tocka
可比较:
class tocka: IComparable<tocka> {
...
public int Compare(tocka other) {
if (Object.RefrenceEquals(other, this))
return 0;
else if (Object.RefrenceEquals(other, null))
return 1;
return t.X - other.t.X; // <- Matthew Watson's idea
}
}
// So you can sort the list by Sort:
tocke.Sort();
答案 2 :(得分:0)
您可以使用LINQ,例如:
tocke.Sort( (x,y) => x.t.X.CompareTo(y.t.X) );
但首先你必须公开t
,至少在获得它时:
public Point t { get; private set; }
答案 3 :(得分:0)
public
修饰符添加到您的班级。然后解决方案将如下:
public class Tocka
{
public Point Point { get; private set; }
}
作为对您问题的回答,您应使用Linq
List<Tocka> l = ...
var orderedTocka = l.OrderBy(i => i.Point.X);
注意:请确保Point永远不会null
,否则上面列出的Linq-Query
将无效
答案 4 :(得分:0)
您可以使用以下方式进行就地排序:
tocke.Sort((a, b) => a.t.X.CompareTo(b.t.X));
或使用LINQ(创建新列表):
tocke = tocke.OrderBy(x=> x.t.X).ToList();
您应该将t
封装为属性。另外,如果t
可以是null
,则应该对上述lambda添加无效检查。