可能重複:
How to sort an array of FileInfo[] C#排序基於所述對象的屬性強類型對象的數組
的How to sort an array of FileInfo[] C#
重複我有一個數組[]對象的,用於某些原因,我不能將其更改爲List <>,是否可以根據對象的1字段中的值對對象的數組[]進行排序?
例如
arrayOfFruit[] fruit;
fruit.sort(name);
感謝
可能重複:
How to sort an array of FileInfo[] C#排序基於所述對象的屬性強類型對象的數組
的How to sort an array of FileInfo[] C#
重複我有一個數組[]對象的,用於某些原因,我不能將其更改爲List <>,是否可以根據對象的1字段中的值對對象的數組[]進行排序?
例如
arrayOfFruit[] fruit;
fruit.sort(name);
感謝
可以使用Array .. ::。排序方法(Array,IComparer的)
可以使用IComparer作爲參數分類
void SomeMethod()
{
Fruit fruits[] = GetArrayOfFruit();
Array.Sort(fruits, FruitNameComparer);
}
int FruitNameComparer(Fruit lhsOfQEquals, Fruit rhsOfEquals)
{
return String.Compare(lhsOfQEquals.Name, rhsOfEquals.Name);
}
如果你想要一個乾淨的區別選擇器和比較器,你可以使用這個輔助類。這太糟糕了,你不能有一個「類擴展方法」給Array.Sort
一組帶重載的選擇器。
public static class SelectingComparer<T>
{
public static IComparer<T> Create<U>(Func<T, U> selector)
{
return new SelectingComparerImpl<U>(selector, null);
}
public static IComparer<T> Create<U>(Func<T, U> selector, IComparer<U> comparer)
{
return new SelectingComparerImpl<U>(selector, comparer.Compare);
}
public static IComparer<T> Create<U>(Func<T, U> selector, Comparison<U> comparison)
{
return new SelectingComparerImpl<U>(selector, comparison);
}
private class SelectingComparerImpl<U>
: IComparer<T>
{
private Func<T, U> selector;
private Comparison<U> comparer;
public SelectingComparerImpl(Func<T, U> selector, Comparison<U> comparer)
{
if (selector == null)
throw new ArgumentNullException();
this.selector = selector;
this.comparer = comparer ?? Comparer<U>.Default.Compare;
}
public int Compare(T x, T y)
{
return this.comparer(this.selector(x), this.selector(y));
}
}
}
在使用中:
從幾天前public class Testing
{
public void Foo()
{
FileInfo[] files = new FileInfo[30];
// FILL THE FILE ARRAY
Array.Sort(files, SelectingComparer<FileInfo>.Create(file => file.Name));
Array.Sort(files, SelectingComparer<FileInfo>.Create(file => file.Name, StringComparer.OrdinalIgnoreCase));
}
}
重複... ...搜索 – 2009-07-31 09:43:38