我正在嘗試排序String
的ArrayList
。C#排序Arraylist字符串按字母順序排列
考慮:
{A,C,AA,B,CC,BB}
Arraylist.Sort
給出:
{A,AA,B,BB,C,CC}
我需要的是:
{A,B,C,AA,BB,CC}
我正在嘗試排序String
的ArrayList
。C#排序Arraylist字符串按字母順序排列
考慮:
{A,C,AA,B,CC,BB}
Arraylist.Sort
給出:
{A,AA,B,BB,C,CC}
我需要的是:
{A,B,C,AA,BB,CC}
這是一所古老的學校,但我去了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
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
請注意,這不會修改ArrayList,它將創建該集合中值的新序列。 (這可能是可以接受的,重要的是要意識到這一點。) – Servy
是的,當然,好的音符。另一個需要注意的是,即使你在'sorted'變量被聲明之後,但實際調用之前修改了'list',它也會包含新元素。 「排序」查詢正在以延遲方式執行 –
它更容易使用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();
我會建議使用ToArray()
方法(或只使用一個List<string>
instad一個ArrayList的),以充分利用OrderBy
的和ThenBy
函數。這將是這個樣子:
list = list.OrderBy(/*Order it by length*/).ThenBy(/*Order alphabetically*/);
您可以創建一個IComparable
類回吐兩個字符串,並如下對它們進行排序:
if (a.Length == b.Length)
return String.Compare(a, b);
return a.Length.CompareTo(b.Length);
您可能還需要處理null
案件。
首先劈seperat清單列表,然後逐一對它們進行排序。 – Moriya
是否有沒有使用強類型'List'的原因? –
在LinkedList上使用ArrayList有很多優點。 – rbtLong