我有ListView
来显示一些图片(使用ImageList
)。到目前为止一切正常。我可以轻松地按照Text
属性对项目进行排序。但我希望能够按照创建日期(ASC或DESC)对它们进行排序。
项目是这样创建的:
Item.Text = file name
item.Tag = file path
我正在尝试对这样的日期进行排序,但是没有成功排序字典,而且我也不知道如何将该字典项目转换回listview:
private void menuViewSortDate_Click(object sender, EventArgs e)
{
var files = new Dictionary<ListViewItem, DateTime>();
foreach(ListViewItem item in listViewLoadedImages.Items)
{
files.Add(item, File.GetCreationTime(item.Tag.ToString()));
}
listViewLoadedImages.BeginUpdate();
listViewLoadedImages.Items.Clear();
// how to sort dictionary by DateTime ??
// like files.Sort(bydate);
//How can refer to key values (listviewitems) in dictionary
listViewLoadedImages.Items.AddRange((ListViewItem)files.Keys);
listViewLoadedImages.EndUpdate();
}
答案 0 :(得分:1)
字典经过优化,可快速检索,但这意味着内部订单未定义,并由内部实现指定。
如果您需要具有密钥的特定订单,请使用SortedDictionary
类,如有必要,将其传递给IComparer,以定义排序顺序。
答案 1 :(得分:0)
正如Avner所说,默认情况下不会对字典进行排序,但您可以使用一些LINQ通过执行以下操作来返回IEnumerable:
var results = files.OrderBy(x=>x.Value);
我也不确定如何将ListViewItem作为您的密钥唯一,但是您可以尝试投射字典密钥
var lvItems = files.Keys.Cast<ListViewItem>();