none
ObserableCollection<T>如何实现List<T>的FindAll、FindIndex、InserRange三个方法? RRS feed

  • 问题

  • 版主及各位老师,

    一、问题背景
    aEntities和bEntities分别代表两个数据结构相同的层次数据集合对象(泛型list<T>)。
    aEntities集合中包含了一系列bEntities集合在动态生成时,可根据当前节点currentKey确定插入位置iInsert,然后插入到该位置的子集合。
    我使用List<T>类的以下三个方法,List<T>.FindAll、List<T>.FindIndex、List<T>.InsertRange 实现了上述功能。

    二、实现算法(伪代码)
    //根据bEntities集合当前生成节点的currentKey,查找到aEntities集合中该位置,并找出其下的所有下位节点集合放入临时集合tempList;
    List<DataEntity> tempList = aEntities.FindAll(delegate(DataEntity de)
    { return de.ParentKey == currentKey; });

    //定位当前节点currentKey在bEntities集合中的位置,获取其索引iInsert;
    int iInsert = bEntities.FindIndex(0, delegate(DataEntity de)
    { return de.ParentKey == currentKey; });

    //将临时集合tempList插入到bEntities集合的该索引位置。
    bEntities.InsertRange(iInsert, tempList);

    三、问题
    正在编写一个WPF客户端程序,为了按照MVVM模式生成树视图,需要使用ObservableCollection<T> 类替换List<T>类,但ObserableCollection没有上述对应方法。
    为了实现上述功能,设想:
    1、先将两个ObserableCollection转换成List,按上述算法完成查找、定位、插入后,再将结果集合转回ObserableCollection。
    问题:如何进行转换?这种算法开销是不是太大,有没有可行性?
    2、有没有直接在ObserableCollection集合上实现上述功能的办法?

    谢谢回复!


    ly_he

    2016年4月1日 1:09

答案

全部回复