从数组列表中排序数据

本文关键字:排序 数据 列表 数组 | 更新日期: 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这样做吗?是我忘了什么简单的事吗?