有没有更有效的方法来创建分组列表

约翰

我想创建一个新的、已删除的、常见的项目的分组列表。我目前这样做:

public class ListSortingGroupingTest
{
    List<int> OldList = new List<int> { 1, 2, 3, 4, 5 };
    List<int> NewList = new List<int> { 3, 4, 5, 7, 8, 9 };

    public void CreateGroupedList()
    {
        var deleted = OldList.Except(NewList).Select(i => new { Group = "Deleted", Number = i });
        var added = NewList.Except(OldList).Select(i => new { Group = "Added", Number = i});
        var common = NewList.Intersect(OldList).Select(i => new { Group = "Common", Number = i});

        var result = deleted.Union(added).Union(common);

    }
}

这有效。但我想知道是否有更好或更有效的方法?

最终我希望在 WPF Grouped ListView 中绑定到它。

伊万·斯托耶夫

您当前的方法是提取新旧值集(即唯一序列)之间变化的信息的标准和自然方法。由于基于哈希查找的实现,使用的 LINQ 集合运算符 (ExceptIntersect) 非常有效。虽然这 3 次调用会在内部创建 3 个哈希集,但复杂度仍然是O(N+M)唯一的改进是使用Concat而不是Union,因为以前的方法将唯一地分隔值。

一种更有效的方法(但仍然O(N+M))可能是将新旧项目与附加属性连接起来,指定值是旧的还是新的,然后按值分组并根据分组计数和内容确定添加/删除/通用状态- 具有 2 个值的组是常见的,对于具有单个值的组,添加/删除取决于该值是新的还是旧的:

var result = OldList.Select(x => new { Value = x, IsNew = false })
    .Concat(NewList.Select(x => new { Value = x, IsNew = true }))
    .GroupBy(x => x.Value)
    .Select(g => new
    {
        Group = g.Count() > 1 ? "Common" : g.First().IsNew ? "Added" : "Deleted",
        Number = g.Key
    });

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有更有效的方法来按数组分组?

来自分类Dev

有没有更有效的方法来按数组分组?

来自分类Dev

有没有更有效的方法来创建此2D列表?

来自分类Dev

有没有更有效的方法来运行多个UPDATE SQL语句

来自分类Dev

有没有更有效的方法来在servlet中输出html?

来自分类Dev

有没有更有效的方法来执行此嵌套SQL查询?

来自分类Dev

有没有更有效的方法来遍历数据帧?

来自分类Dev

有没有更有效的方法来编码此“ 2 Sum”问题

来自分类Dev

有没有更有效的方法来重构Ruby上哈希的迭代?

来自分类Dev

有没有更快,更有效的方法来保存python字典?

来自分类Dev

有没有更有效的方法来包装浮点数?

来自分类Dev

有没有更有效的方法来存储关键字参数?

来自分类Dev

有没有更有效的方法来运行多个UPDATE SQL语句

来自分类Dev

有没有更有效的方法来运行此功能?

来自分类Dev

Python:有没有更有效的方法来转换月份的 int 值?

来自分类Dev

有没有更有效的方法来编写这段代码?

来自分类Dev

有没有更有效(更乏味)的方法来做到这一点?

来自分类Dev

有没有比pip更有效的方法来满足项目依赖性?

来自分类Dev

有没有更有效的方法来检查字符串中的字符?

来自分类Dev

有没有更有效的方法来增加字典中每个键的值?

来自分类Dev

有没有更有效的方法来编写包含FontAwesome图标的功能?

来自分类Dev

有没有比python中的networkx更有效的方法来计算最短路径问题?

来自分类Dev

有没有更好/更有效的方法来实现这一目标?

来自分类Dev

在Python 3中,有没有更有效的方法来进行这些循环?

来自分类Dev

有没有更有效的方法来检查字符串中的字符?

来自分类Dev

有没有更有效的方法来为每个视图设置会话变量?

来自分类Dev

有没有一种比Python中的list.sort()更有效的方法来对列表进行排序?

来自分类Dev

有没有更有效的方法来使用 C 为问答游戏创建计数器?

来自分类Dev

有没有更有效的方法来使用grep进行拼字搜索?

Related 相关文章

  1. 1

    有没有更有效的方法来按数组分组?

  2. 2

    有没有更有效的方法来按数组分组?

  3. 3

    有没有更有效的方法来创建此2D列表?

  4. 4

    有没有更有效的方法来运行多个UPDATE SQL语句

  5. 5

    有没有更有效的方法来在servlet中输出html?

  6. 6

    有没有更有效的方法来执行此嵌套SQL查询?

  7. 7

    有没有更有效的方法来遍历数据帧?

  8. 8

    有没有更有效的方法来编码此“ 2 Sum”问题

  9. 9

    有没有更有效的方法来重构Ruby上哈希的迭代?

  10. 10

    有没有更快,更有效的方法来保存python字典?

  11. 11

    有没有更有效的方法来包装浮点数?

  12. 12

    有没有更有效的方法来存储关键字参数?

  13. 13

    有没有更有效的方法来运行多个UPDATE SQL语句

  14. 14

    有没有更有效的方法来运行此功能?

  15. 15

    Python:有没有更有效的方法来转换月份的 int 值?

  16. 16

    有没有更有效的方法来编写这段代码?

  17. 17

    有没有更有效(更乏味)的方法来做到这一点?

  18. 18

    有没有比pip更有效的方法来满足项目依赖性?

  19. 19

    有没有更有效的方法来检查字符串中的字符?

  20. 20

    有没有更有效的方法来增加字典中每个键的值?

  21. 21

    有没有更有效的方法来编写包含FontAwesome图标的功能?

  22. 22

    有没有比python中的networkx更有效的方法来计算最短路径问题?

  23. 23

    有没有更好/更有效的方法来实现这一目标?

  24. 24

    在Python 3中,有没有更有效的方法来进行这些循环?

  25. 25

    有没有更有效的方法来检查字符串中的字符?

  26. 26

    有没有更有效的方法来为每个视图设置会话变量?

  27. 27

    有没有一种比Python中的list.sort()更有效的方法来对列表进行排序?

  28. 28

    有没有更有效的方法来使用 C 为问答游戏创建计数器?

  29. 29

    有没有更有效的方法来使用grep进行拼字搜索?

热门标签

归档