使用KeyValuePair和重复键对ObservableCollection进行排序

时间:2014-12-10 10:25:13

标签: c# .net sorting observablecollection

我有一个foreach循环。每个循环我得到一个项目的值(长)和名称(字符串)。

现在我想要创建一个ObservableCollection<KeyValuePair<Int32, String>>()但不是要创建值,而是使用一个以0开头的新索引。集合应该按值排序。如果存在重复值,则应添加两个项目。

示例:

var tempList= new SortedList<long, String>();

foreach (INetworkItem item in ListOfItems)
{
    long value = item.ticks;
    string name = item.name;

    // tried:
    // tempList.Add(value , name );
    ...
}

内容ListOfItems

  • 3444423423,“aaaaaa”
  • 9999457567,“bbbbbb”
  • 1111100065,“cccccc”
  • 3444423423,“aaaaaa”

在foreach循环之后,我需要ObservableCollection<KeyValuePair<Int32, String>>()看起来像:

  • 0,“cccccc”
  • 1,“aaaaaa”
  • 2,“aaaaaa”
  • 3,“bbbbbb”

我该怎么做?

1 个答案:

答案 0 :(得分:1)

首先,您需要按刻度排序ListOfItems

var items = ListOfItems.OrderBy(x => x.ticks);

然后你应该将它们转换成你想要的格式

  

0,&#34; cccccc&#34;
  1,&#34; aaaaaa&#34;
  2,&#34; aaaaaa&#34;
  3,&#34; bbbbbb&#34;

您可以Select

执行此操作
items = items.Select((x, i) => new KeyValuePair<int,string>(i, x.name));

然后用它初始化你的收藏。

var collection = new ObservableCollection<KeyValuePair<Int32, String>>(items);