[英]Sort ListBox numerically in C#
我试图用数字排序一个充满数字的列表框。 为什么这不起作用?
{
ArrayList Sorting = new ArrayList();
Sorting.Add (lbNumbers.Text);
int[] items = new int[Sorting.Count];
Sorting.CopyTo(items);
Array.Sort(items);
lbNumbers.Items.Add(items);
}
可能是因为当你的数字表示为字符串时,它们不会按照你期望的方式排序。 它们将排序为字符串而不是数字。
例如,如果您有一个列表,例如:
10
9
101
它将被排序为:
10
101
9
首先,解析字符串元素,然后排序。
// 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();
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());
您正在排序lbNumbers.Text =>字符串
您必须在排序前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);
}
使用一点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();
解析和排序可以在同一个语句中完成,但为了便于阅读在这里拆分。
试试这个例子:
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);
}
你想要做的是只阅读所选文本。 这样,您可以将列表框中的所有项目都添加到arraylist中,对它们进行排序,然后再将它们添加回列表框。
请记住,所有未分类的项目仍然存在,因此您需要先清除列表框。 那是什么listBox1.Items.Clear();
不
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.