2

假设我有一个列表:

MyList = new List<MyEntity>();

然后我尝试将项目添加到列表中。WCF RIA 服务通过异步调用加载的每个项目。我希望 MyList 总是按 MyEntity 的属性排序,比如它的 ID,在添加任何新项目之后,

如何解决这个问题?

4

4 回答 4

2

您可以使用SortedSet保持排序

       SortedSet<int> x = new SortedSet<int>();

        x.Add(5);
        x.Add(1);
        x.Add(23);
        x.Add(51);

        foreach (var i in x)
            Console.WriteLine(i);

将打印

1
5
23
51
于 2012-09-14T18:05:10.630 回答
2

你可以使用

Mylist.Sort();

或者

MyList.OrderBy();

可能后者对您来说会更好地指定一个属性

MyList.OrderBy(x => x.ID);

正如其他人所说,这效率不高, SortedSet 将是更好的选择,但如果更改类型不是一种选择,那么这是一种可能性。

于 2012-09-14T18:27:36.710 回答
1

List<T>不是一个排序的容器,并且通过在插入之后调用排序来保持它的排序并不是最好的方法。改用按定义排序的容器,例如基于树的集合或SortedSet

于 2012-09-14T18:07:38.743 回答
1

如果您使用 List<Entity> 集合非常重要,那么您可以使用 BinarySearch 来定位位置。

int index = MyList.BinarySearch(newMyEntity, yourComparer);
if (index < 0)
    MyList.Insert(~index, newMyEntity);
else
    // An identical item has been found.

yourComparer 是 IComparer<MyEntity> 的一个实例。如果 MyEntity 实现 IComparable<MyEntity> 接口,则可以避免它。

请注意,插入语句的效率相当低,期望像 O(n/2) 这样的性能。

希望这对您的探索有所帮助。

于 2012-09-14T19:10:59.560 回答