4

array.sort に少し問題があります。クラスがあり、このクラスには 2 つのフィールドがあります。1 つはランダムな文字列で、もう 1 つは乱数です。1 つのパラメーターで並べ替えたい場合は、問題なく動作します。しかし、2つのパラメーターでソートしたいと思います。最初のものは数値の合計 (低から高へ) であり、これらの数値がそれらに与えられたランダムな文字列 (低から高へ) によって等しい場合は THEN です。

これらの 2 種類の並べ替えを「マージ」するには、ヒントとヒントを教えてください。

Array.Sort(Phonebook, delegate(PBook user1, PBook user2)
        { return user1.Sum().CompareTo(user2.Sum()); });
        Console.WriteLine("ORDER");

        foreach (PBook user in Phonebook)
        {
            Console.WriteLine(user.name);
        }

それが、1つのパラメーターで注文する方法です。

4

3 に答える 3

12

私はこれがあなたが求めているものだと思います:

sourcearray.OrderBy(a=> a.sum).ThenBy(a => a.random)
于 2012-11-20T16:28:34.073 に答える
1

CompareToメソッドで複数のフィールドを比較するために使用する一般的なアルゴリズムは次のとおりです。

public int compare(MyClass first, MyClass second)
{
    int firstComparison = first.FirstValue.CompareTo(second.SecondValue);

    if (firstComparison != 0)
    {
        return firstComparison;
    }
    else
    {
        return first.SecondValue.CompareTo(second.SecondValue);
    }
}

ただし、LINQ を使用すると、これを行うための構文がはるかに簡単になり、次のように書くだけで済みます。

Phonebook = Phonebook.OrderBy(book=> book.Sum())
            .ThenBy(book => book.OtherProperty)
            .ToArray();
于 2012-11-20T16:35:39.720 に答える