2

この貴重な石のリストがあるとします: Adamantite, Diamonds, Crystal, Gold, Silver, Bronze.

Rarity各岩石は、次のいずれかまたは次の値に基づく文字列であるという名前のプロパティを持つオブジェクトです: Common, Precious, Rare, Mythic, Infinite.

これらの値に基づいてリストを並べ替えたいと思いCommonますInfinite。これを簡単に達成できるlinqを使用する方法はありますか、それともこの場合のために新しいメソッドをポップする必要がありますか? また、貴重なものから少ないものまで分類できるようにしたいと思います。

ありがとう!

4

2 に答える 2

7

文字列の代わりに列挙型を使用することをお勧めします。次に、希少性に従って列挙型の値を単純に並べ替えることができ、並べ替えは「うまく機能する」はずです。

IComparer<string>または、要件に従って文字列を並べ替える を実装することを検討してください。Enumerable.OrderBy()その後、を受け取るオーバーロードをIComparer<TKey>使用できます。

于 2013-04-30T17:17:19.110 に答える
2

列挙型を使用したくない場合は、次のようなカスタム比較メソッドを作成してください。

{
...
List rocks = GetRocks();

List sortedRocks = rocks.OrderBy(a => a, new RockComparer()).ToList();
...
}

public class RockComparer : IComparer<string> 
{ 
    public int Compare(Rock x, Rock y) 
    { 
        ... (implement your comparing functionality here) 
    } 
}
于 2013-04-30T17:29:59.027 に答える