如何在Visual C#中对对象数组进行排序?
问题描述:
我有一个对象有两个都是整数值的成员。我做了这些对象的数组。每个对象值都用随机整数填充。如何在Visual C#中对对象数组进行排序?
我想根据第一个成员值对对象数组进行排序。我将如何做到这一点?
答
您在使用.NET 3.5?如果是这样,它是那么容易,因为:
array = array.OrderBy(x => x.MemberName).ToArray();
这虽然会创建一个新阵列 - 如果任何其他代码有旧数组的引用,它仍然会看到未排序的数据。
或者,你可以使用Array.Sort
方法,将就地对数组进行排序,通过以下三种方式之一:
- 让你的类型实现
IComparable<T>
允许对象本身与其他 - 比较创建这可以比较型
- 的任何两个对象的
IComparer<T>
实例创建Comparison<T>
类型的委托,其可以比较型
最后一个可能是,如果你正在使用C#3最简单的方法:
Array.Sort(array, (x1, x2) => x1.MemberName.CompareTo(x2.MemberName));
答
class Program
{
class Foo
{
public int FirstMemberValue { get; set; }
}
static void Main(string[] args)
{
var foos = new[]
{
new Foo { FirstMemberValue = 1 },
new Foo { FirstMemberValue = 3 },
new Foo { FirstMemberValue = 2 }
};
Array.Sort(foos, (f1, f2) => f1.FirstMemberValue.CompareTo(f2.FirstMemberValue));
foreach (var item in foos)
{
Console.WriteLine(item.FirstMemberValue);
}
}
}