C# sort Arraylist strings alphabetical and on length

有些话、适合烂在心里 提交于 2019-12-30 23:33:08

问题


I'm trying to sort an ArrayList of String.

Given:

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

Arraylist.Sort gives:

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

What I need is:

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

回答1:


This is kind of old school but, I went the 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;
    }
}

and then test it . . .

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);
    }
}

output:

A
B
C
AA
BB
CC



回答2:


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();

prints:

A 
B 
C 
AA 
BB 
CC 



回答3:


It's easier to do this with Linq as so:

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

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

Note that the OrderBy method returns a new list. If you want to modify the original, then you need to re-assign it as so:

list = list.OrderBy(x=>x.Length).ThenBy(x=>x).ToArray();



回答4:


I would suggest using the ToArray() method (or just using a List<string> instad of an ArrayList) to take advantage of the OrderBy and ThenBy functions. It would look something like this:

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



回答5:


You could create an IComparable class taking in two Strings and sort them as follows:

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

You may also want to handle null cases.



来源:https://stackoverflow.com/questions/14260271/c-sharp-sort-arraylist-strings-alphabetical-and-on-length

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!