0

数値でいっぱいのリストボックスを数値でソートしようとしています。なぜこれが機能しないのですか?

        {
            ArrayList Sorting = new ArrayList();
            Sorting.Add (lbNumbers.Text);
            int[] items = new int[Sorting.Count];
            Sorting.CopyTo(items);
            Array.Sort(items);
            lbNumbers.Items.Add(items);

        }
4

7 に答える 7

2

おそらく、数値が文字列として表されている場合、期待どおりに並べ替えられないためです。数値ではなく文字列としてソートされます。

たとえば、次のようなリストがあるとします。

10
9
101

次のようにソートされます。

10
101
9
于 2012-10-09T12:53:39.253 に答える
1

First, parse the string-elements, then sort.

// the itemList is your lbNumbers.Text
var itemList = new List<string> {"9", "1", "10", "11"};

// use TryParse if you're not sure if really all elements are numbers
var numberList = itemList.Select(int.Parse).ToList();
numberList.Sort();
于 2012-10-09T13:02:15.623 に答える
0

LINQ を少し使用する

        string list = "1,24,3,10,12,11";

        //Split the string into the tokens containing the numbers
        string[] tokens = list.Split(',');

        //Parse each string representing an integer into an integer
        //return the resultant object as an array of integers
        int[] sorting = tokens.Select(x => int.Parse(x)).ToArray<int>();

        //Sort them numerically and return as an array of integers
        sorting = sorting.OrderBy(x => x).ToArray<int>();

        //Display them to convince ourselves it works.
        foreach (int x in sorting)
        {
            Console.WriteLine(x);
        }

        Console.ReadLine();

解析と順序付けは同じステートメントで実行できますが、読みやすくするためにここでは分割されています。

于 2012-10-09T13:04:10.487 に答える
0
ArrayList Sorting = new ArrayList(); 

foreach (var o in listBox1.Items) {
    Sorting.Add(o);
} 

Sorting.Sort(); 

listBox1.Items.Clear();

foreach (var o in Sorting) {
    listBox1.Items.Add(o); 
}

追加:降順で並べ替えるには、

1. 以下に示すように、クラス ReverseSort を作成します。

// implementation:
public class ReverseSort : IComparer
{
    public int Compare(object x, object y)
    {
        // reverse the arguments
        return Comparer.Default.Compare(y, x);
    }    
}

2.Sort のコード行を次の行に置き換えます。

Sorting.Sort(new ReverseSort());
于 2012-10-09T12:54:56.773 に答える
0

lbNumbers.Text => 文字列を並べ替えています

于 2012-10-09T12:55:00.043 に答える
0

並べ替えるclear前に

ArrayList arrayList = new ArrayList(); 
foreach (object o in lbNumbers.Items) 
{
   arrayList.Add(o);
}

arrayList.Sort(); 

lbNumbers.Items.Clear();

foreach(object o in arrayList)
{
    lbNumbers.Items.Add(o); 
}
于 2012-10-09T12:55:35.277 に答える
-1

この例を試してください:



    listBox1.Items.Add(3);
    listBox1.Items.Add(1);
    listBox1.Items.Add(2);

    ArrayList sort = new ArrayList();
    foreach (object item in listBox1.Items)
    {
        sort.Add(item);
    }
    sort.Sort();
    listBox1.Items.Clear();
    foreach (int item in sort)
    {
        listBox1.Items.Add(item);
    }

あなたがやろうとしたのは、選択したテキストだけを読むことでした。このようにして、リストボックス内のすべてのアイテムを配列リストに取得し、それらを並べ替えてから、リストボックスに再度追加することができます。

並べ替えられていないアイテムはすべて残っているため、最初にリストボックスをクリアする必要があることに注意してください。それは何をするlistBox1.Items.Clear();

于 2012-10-09T13:21:55.387 に答える