簡體   English   中英

如何比較兩個列表值?

[英]How to compare 2 lists values?

我有2個列表,當第二個列表中沒有第一個列表中的項目時,我想刪除這些項目。

 public class ResolutionsRow
{
    public String Name { get; set; }
    public int ID { get; set; }
}

public List<ResolutionsRow> Categories { get; set; }

在下面的Category.LoadForProject(project.ID)中返回一個IList

DeleteItems(Category.LoadForProject(project.ID), Categories);

private void DeleteItems(dynamic currentItems, dynamic items) 
            {
                if (currentItems != null)
                {
                    foreach (var existingItem in currentItems)
                    {
                        if (items.Contains(existingItem.Name))
                           items.Remove(existingItem.Name);
                    }
                } 
            }

我收到錯誤消息

'System.Collections.Generic.List.Contains(MvcUI.Models.ResolutionsRow)'的最佳重載方法匹配具有一些無效的參數。 我的代碼有什么問題,我該如何糾正? 請幫助。

我試圖將代碼更改為,但是出現錯誤信息

錯誤6參數1:無法從'int'轉換為API.Category'MvcUI \\ Models \\ ProjectModel.cs 255 44 MvcUI錯誤5'System.Collections.Generic.ICollection.Contains(API.Category)'的最佳重載方法匹配包含一些無效的參數MvcUI \\ Models \\ ProjectModel.cs 255 24 MvcUI


var categories = Category.LoadForProject(project.ID);
                foreach (var item in Categories)
                {
                    if(categories.Contains(item.ID))
                   {

                   }
                }

什么是items 我猜這是ResolutionsRow的列表-因此您將需要搜索具有該名稱/ ID的項目,而不是名稱/ ID本身。

如果它們是相同的對象實例,則僅Remove(existingItem)將起作用,但是否則(如果它們是碰巧具有相同.Name不同對象實例):

items.RemoveAll(item => item.Name == existingItem.Name);

順便說說; 您真的需要dynamic嗎? 沒有它,編譯器會告訴您問題所在。 它無濟於事,並且很可能會引起很多問題(顯式接口實現,lambda等-某些結構不是dynamic

這是簡單的LINQ答案:

var currentItems = new int[] { 1, 2, 5, 6 };
var items = new int[] { 2, 3, 4, 5 };

var resultItems = items.Except(currentItems); // resultItems == new int[] { 3, 4 }

更改

items.Contains(existingItem.Name);

items.Remove(existingItem.Name);

items.Contains(existingItem);

items.Remove(existingItem);

您想使用items1.Except(items2)

您的items.Contains方法簽名期望的類型不同於您提供的類型。 看起來您提供的是字符串而不是ResolutionsRow。

您多久這樣做一次,每個列表中有多少個項目? 您在做什么通常被認為是“設置操作”(聯合,交集,減號等)。 如果對前面兩個問題的回答是“很多”,那么您要考慮使用SortedSetHashSet

您當前的實現是O(m * n)(其中m和n是兩個列表的大小)。 如果使用哈希集,則它為O(n),因為實際上僅迭代了第二個集。 建立集合(O(m + n))也要付出代價,但是如果您有足夠的對象或者可以將其用於多個操作中,那是值得的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM