从数组列表中排序数据
本文关键字:排序 数据 列表 数组 | 更新日期: 2023-09-27 18:05:04
我有一个由数据组成的数组列表,格式为
2011年8月12日,2011年9月11日
我使用下面的代码进行排序:
Array.Sort(fileNames, delegate(string first, string second)
{
return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second));
});
我从上面的代码得到的结果是
2011年9月11日,2011年8月12日排序后
你说你的数据是"字符串数组列表" -你是指
List<string>
或
string[]
?
它在你实现代码的方式上有一点不同。假设您有一个实际的数组,那么代码非常直接,尽管不像我们希望的那样干净:
private void SortButton_Click(object sender, RoutedEventArgs e)
{
ItemsListBox.ItemsSource = null;
Array.Sort(items, delegate(string first, string second)
{
return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second));
});
ItemsListBox.ItemsSource = items;
}
但是,如果您处理的是List
private void SortButton_Click(object sender, RoutedEventArgs e)
{
ItemsListBox.ItemsSource = null;
var arrayOfItems = items.ToArray<string>();
Array.Sort(arrayOfItems, delegate(string first, string second)
{
return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second));
});
items = new List<string>(arrayOfItems);
ItemsListBox.ItemsSource = items;
}
相似,但不同:)由于排序发生在适当的位置,它实际上只是排序数组,而不是实际的List
现在-注意ItemsSource之前的清除和之后的重置。我用它玩了一会儿,但如果不做这两个步骤,它就不能正常工作。我认为这是数据绑定基础设施的某个故障。我尝试使用字符串[],列表和ObservableCollection,但每次都必须清除和重置ItemsSource以获得ListBox重新绘制。
你关于Convert.ToDateTime()的评论对我来说似乎不是问题。我还尝试了DateTime.Parse(),效果也不错。问题原来是在清除和重新分配ListBox.ItemsSource。
有谁知道为什么ListBox这样做吗?是我忘了什么简单的事吗?