私の問題は、常に特定の方法でオブジェクトのコレクションを注文したいということです。
例えば:
class foo{
public string name {get;set;}
public DateTime date {get;set;}
public int counter {get;set;}
}
..。
IEnumerable<foo> dosomething(foo[] bar){
return bar.OrderBy(a=>a.name).ThenBy(a=>a.date).ThenBy(a=>a.counter);
}
私が抱えている問題は、常にソート順での非常に長い時間のかかる取り組みです。きちんとした解決策は、を実装するクラスを作成するだけのように見えますIComparer<foo>
。つまり、次のことができます。
IEnumerable<foo> dosomething(foo[] bar){
return bar.OrderBy(a=>a, new fooIComparer())
}
。
問題は、これが実装する注文方法は次のとおりです。
..。
public int Compare(foo x, foo y){ }
つまり、非常にきめ細かく比較します。
現在の実装(疑似コードを書いていますが、おそらく機能します)
public int Compare(foo x, foo y){
if (x==y)
return 0;
var order = new []{x,y}.OrderBy(a=>a.name).ThenBy(a=>a.date).ThenBy(a=>a.counter);
return (order[0] == x) ? -1 : -1;//if x is first in array it is less than y, else it is greater
}
これは正確には効率的ではありませんが、別の方法でより適切なソリューションを提供できますか?理想的には、Compare(x、y)メソッドをまったく使用しませんか?