4

をソートしようとしていArrayListますString

与えられた:

{A,C,AA,B,CC,BB}

Arraylist.Sort与えます:

{A,AA,B,BB,C,CC}

私が必要とするのは:

{A,B,C,AA,BB,CC}
4

5 に答える 5

12
ArrayList list = new ArrayList {"A","C","AA","B","CC","BB"};

var sorted = list.Cast<string>()
                 .OrderBy(str => str.Length)
                 .ThenBy(str => str);

//LinqPad specific print call
sorted.Dump();

プリント:

A 
B 
C 
AA 
BB 
CC 
于 2013-01-10T14:37:22.553 に答える
4

Linqを使用すると、次のように簡単に実行できます。

string [] list = { "A","C","AA","B","CC","BB"};

var sorted = list.OrderBy(x=>x.Length).ThenBy(x=>x);

OrderByこのメソッドは新しいリストを返すことに注意してください。オリジナルを変更する場合は、次のように再割り当てする必要があります。

list = list.OrderBy(x=>x.Length).ThenBy(x=>x).ToArray();
于 2013-01-10T14:37:56.127 に答える
0

これは一種の古い学校ですが、私は IComparer Interface に行きました。. .

public class SortAlphabetLength : System.Collections.IComparer
{
    public int Compare(Object x, Object y)
    {
        if (x.ToString().Length == y.ToString().Length)
            return string.Compare(x.ToString(), y.ToString());
        else if (x.ToString().Length > y.ToString().Length)
            return 1;
        else
            return -1;
    }
}

そしてそれをテストします。. .

class Program
{
    static void Main(string[] args)
    {
        ArrayList values = new ArrayList()
        {
            "A","AA","B","BB","C","CC"
        };

        SortAlphabetLength alphaLen = new SortAlphabetLength();
        values.Sort(alphaLen);

        foreach (string itm in values)
            Console.WriteLine(itm);
    }
}

出力:

A
B
C
AA
BB
CC
于 2013-01-10T14:52:29.503 に答える
0

関数と関数を利用するには、ToArray()メソッドを使用する (または単にList<string>ArrayList の instad を使用する)ことをお勧めします。次のようになります。OrderByThenBy

list = list.OrderBy(/*Order it by length*/).ThenBy(/*Order alphabetically*/);
于 2013-01-10T14:41:23.837 に答える
0

IComparable2 つの文字列を受け取るクラスを作成し、次のように並べ替えることができます。

if (a.Length == b.Length)
    return String.Compare(a, b);
return a.Length.CompareTo(b.Length);

ケースを処理することもできnullます。

于 2013-01-10T14:42:06.397 に答える