1
ArrayList SortItems = new ArrayList();
        SortItems.Add("Item1");
        SortItems.Add("Item2");
        SortItems.Add("Item3");
        SortItems.Add("Item4");
        SortItems.Add("Item5");
        SortItems.Add("Item6");
        SortItems.Add("Item7");
        SortItems.Add("Item8");
        SortItems.Add("Item9");
        SortItems.Add("Item10");
        SortItems.Add("Item11");

        SortItems.Sort();

このプログラムを実行すると、以下の結果が得られます

ここに画像の説明を入力してください

しかし、Item1、Item2、Item3、Item4、Item5、Item6、Item7、Item8、Item9、Item10、Item11のようにリストを並べ替えたい

4

5 に答える 5

4

カスタム比較ツールを作成します。

public class CusComparer: IComparer
{
    public int Compare(object x, object y)
    {
        return int.Parse((x as string).Substring(4)) - int.Parse((y as string).Substring(4));
    }
}

したがって、次を使用できます。

ArrayList SortItems = new ArrayList();
SortItems.Add("Item1");
SortItems.Add("Item2");
SortItems.Add("Item3");
SortItems.Add("Item4");
SortItems.Add("Item5");
SortItems.Add("Item6");
SortItems.Add("Item7");
SortItems.Add("Item8");
SortItems.Add("Item9");
SortItems.Add("Item10");
SortItems.Add("Item11");

SortItems.Sort(new CusComparer());

ただし、を使用する代わりに、より強力なタイプでのArrayList使用を検討する必要がありますList<T>

于 2012-10-30T09:17:49.120 に答える
1

文字列に辞書式順序を使用するため、結果はそのようにソートされます。比較アルゴリズムは、2つの文字列を左から右に比較します。は、未満であるため、も"1"未満"9""10"なり"9"ます。

文字列の数値部分を、たとえば。"Item05"の代わりにゼロで埋めることができます"Item5"

より一般的で柔軟な方法は、を使用し、文字列形式を理解して文字列を正しく並べ替えることができるArrayList.Sort(IComparer)を実装することです。IComparer

于 2012-10-30T09:20:19.847 に答える
0

あなたの質問は、それがどのような結果をもたらしているかを示していません。

SortedListを使用します。新しいアイテムを追加すると、並べ替えられます。 http://msdn.microsoft.com/en-us/library/system.collections.sortedlist.aspx 欠点は、入力を繰り返すことはできないということです。

于 2012-10-30T09:16:33.730 に答える
0

常に先頭にが付いている場合"Item"は、両方を分割して数値部分で並べ替えることができます。

List<String>代わりに強い型を使用することに注意してください。

List<String> SortItems = list.Select(s => new
                              {
                                  Item = s, 
                                  Number = int.Parse(s.Substring("Item".Length))
                              }).OrderBy(x => x.Number)
                              .Select(x => x.Item).ToList();

または、このSortメソッドのオーバーロードを使用して、元のリストを直接並べ替えることができます。

list.Sort((a, b) =>  
    int.Parse(a.Substring("Item".Length)).CompareTo(int.Parse(b.Substring("Item".Length)))
);
于 2012-10-30T09:17:38.463 に答える
0

を実装して、メソッドIComparerに渡すことができます。Sort

http://msdn.microsoft.com/en-us/library/0e743hdt.aspx

于 2012-10-30T09:19:19.080 に答える