从数组列表中排序数据

时间:2011-08-11 01:18:53

标签: c# windows-phone-7

我有一个数组列表,其中包含格式为

的数据
  

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日

排序后

1 个答案:

答案 0 :(得分:2)

你说你的数据是“字符串的数组列表” - 你的意思是

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&lt; string&gt;被称为“项目”,然后这种方法本身不会起作用。为了实现这个目标,你必须在处理一些事情:

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&lt; string&gt;我们正在使用。

现在 - 请注意清除ItemsSource之前和之后重置。我玩了一会儿,但没有完成这两个步骤就无法正常工作。我认为这是数据绑定基础设施中的某个细分。我尝试使用string [],List和ObservableCollection,但每次都必须清除并重置ItemsSource以重新绘制ListBox。

您对Convert.ToDateTime()的评论对我来说似乎不是问题。我也试过DateTime.Parse(),这也很有用。问题结果是清除和重新分配ListBox.ItemsSource。

有人知道为什么ListBox会这样吗?这简直就是我忘了吗?