2009-07-31 9 views
0

可能な重複の性質に基づいて厳密に型指定されたオブジェクトの配列:
How to sort an array of FileInfo[] C#ソート対象

How to sort an array of FileInfo[] C#

の重複は私がのために、[]オブジェクトの配列を持っています私はそれをリスト<に変更することができない特定の理由は、オブジェクトの1つのフィールドの値に基づいて、オブジェクトの配列[]をソートすることは可能ですか?

例えば

arrayOfFruit[] fruit; 

fruit.sort(name); 

おかげ

+0

重複...検索... –

答えて

0

あなたは、パラメータとしてIComparerを使用することができます並べ替え

0
void SomeMethod() 
{ 
    Fruit fruits[] = GetArrayOfFruit(); 
    Array.Sort(fruits, FruitNameComparer); 
} 

int FruitNameComparer(Fruit lhsOfQEquals, Fruit rhsOfEquals) 
{ 
    return String.Compare(lhsOfQEquals.Name, rhsOfEquals.Name); 
} 
1

セレクタセレクタ比較者をきれいに区別したい場合は、このヘルパークラスを使用できます。 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)); 
    } 
} 
関連する問題