【问题标题】:What is the most efficient way to compare/sort items from two arrays?比较/排序两个数组中的项目的最有效方法是什么?
【发布时间】:2009-07-16 20:50:36
【问题描述】:

我有一个关于有效实施的问题。假设我有两个数组:

一个数组是房子里所有可能的物品:桌子、椅子、电视、壁炉、床 另一个是特定房屋中的一系列物品:桌子、电视、床

我还有两个列表框:

1. 房屋内物品的列表框 - “HAS”列表框 2. listbox items not in the house - “NEEDS”列表框

我需要在“有”列表框中列出房屋中已有的物品,以及在“需要”列表框中列出房屋中不存在的物品。在我看来,嵌套的“For each”循环将是解决这个问题的开始,但我不确定哪种情况需要嵌套。完成这样的任务最有效的方法是什么?

【问题讨论】:

    标签: c# .net vb.net implementation


    【解决方案1】:
    var allItems = (new [] {"Table", "Chair", "TV", "Fireplace", "Bed"});
    var hasItems = (new [] {"Table", "Chair"});
    
    var hasList = hasItems.ToList();
    var needsList = allItems.Except(hasItems).ToList();
    

    【讨论】:

    • 刚刚查找了 Enumerable.Except 实现 - 它确实使用内部 Set 类,因此它必须真正提供相同的性能。其实我之前也不确定。
    【解决方案2】:
    var allList = (new [] {"Table", "Chair", "TV", "Fireplace", "Bed"}).ToList();
    var hasList = (new [] {"Table", "Chair"}).ToList();
    
    var hasSet = new HashSet<string>(hasList);
    var needsList = allList.Where(i => !hasList.Contains(i)).ToList();
    

    这是最快的解决方案(至少在big O notation 中)。

    【讨论】:

    • 首先HashSet是泛型的,所以需要指定HashSet。其次,我认为你的意思是不包含。逻辑应该是这样的: var needsList = allList.Where(i => !hasList.Contains(i)).ToList();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多