C#按照字母和长度排序Arraylist字符串

时间:2013-01-10 14:34:39

标签: c# string sorting arraylist

我正在尝试对ArrayList String进行排序。

假设:

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

Arraylist.Sort给出:

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

我需要的是:

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

5 个答案:

答案 0 :(得分: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 

答案 1 :(得分: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();

答案 2 :(得分:0)

我建议使用ToArray()方法(或仅使用List<string>而不是ArrayList)来利用OrderByThenBy函数。它看起来像这样:

list = list.OrderBy(/*Order it by length*/).ThenBy(/*Order alphabetically*/);

答案 3 :(得分:0)

你可以创建一个IComparable类,接受两个字符串并按如下方式对它们进行排序:

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

您可能还想处理null个案件。

答案 4 :(得分:0)

这是一所老派,但我去了IComparer界面。 。

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