如何排序列表< >其中T是我自己的类,我想按class.somestring排序
本文关键字:排序 自己的 我自己 somestring class 何排序 列表 其中 | 更新日期: 2023-09-27 18:02:28
我有一个class
Class MyClass{
string myString;
MyClass(string newString){
myString = newString;
}
}
我有一个列表
List<MyClass> myList = new List<MyClass>();
myList.Add(new MyClass(some string...);
可以使用List吗?排序排序的对象基于类的一个字段的值?如果是,那又是怎么回事呢?
谢谢
您可以使用Enumerable.OrderBy
:
myList = myList.OrderBy(x => x.myString).ToList();
请注意,这会在旧列表的基础上创建一个新列表。在许多情况下,这不会有什么不同,但这是值得注意的。
或者,由于您限于。net 2.0,您可以定义一个用于比较的自定义函数
class MyClass
{
string myString;
...
public static int CompareByMyString(MyClass x, MyClass y)
{
return String.Compare(x.myString, y.myString);
}
}
并提供给List.Sort
:
myList.Sort(MyClass.CompareByMyString);
你可以继承IComparable。一个例子是:
public class MyClass : IComparable
{
public int Day { get; set; }
public int Hour { get; set; }
public int CompareTo(object obj)
{
if (obj is MyClass)
{
MyClass slot = (MyClass)obj;
if (Day < slot.Day)
{
return -1;
}
else if (Day > slot.Day)
{
return 1;
}
else
{
if (Hour < slot.Hour)
{
return -1;
}
else if (Hour > slot.Hour)
{
return 1;
}
else
{
return 0;
}
}
}
else
{
throw new ArgumentException("Object is not MyClass");
}
}
public override int GetHashCode()
{
unchecked
{
return Day.GetHashCode() ^ Hour.GetHashCode();
}
}
public override bool Equals(object obj)
{
if (obj is MyClass)
{
return this == (MyClass)obj;
}
else
{
throw new ArgumentException("Object is not MyClass");
}
}
public static bool operator ==(MyClass a, MyClass b)
{
return a.CompareTo(b) == 0;
}
public static bool operator !=(MyClass a, MyClass b)
{
return a.CompareTo(b) != 0;
}
public static bool operator <(MyClass a, MyClass b)
{
return a.CompareTo(b) < 0;
}
public static bool operator >(MyClass a, MyClass b)
{
return a.CompareTo(b) > 0;
}
public static bool operator <=(MyClass a, MyClass b)
{
return a.CompareTo(b) <= 0;
}
public static bool operator >=(MyClass a, MyClass b)
{
return a.CompareTo(b) >= 0;
}
}
然后你可以这样写:
List<MyClass> listOfStuff = new List<MyClass>();}
// Add some stuff to the list E.G.
listOfStuff.add(new MyClass());
// Sort the list
listOfStuff.sort();