使用c# - Unsorted list在单个迭代中比较两个字符串列表

本文关键字:两个 列表 字符串 比较 Unsorted list 迭代 单个 使用 | 更新日期: 2023-09-27 18:18:19

我希望使用c# (unsorted List)在一次迭代中实现比较两个列表的逻辑。

例如:

List<string> listA = new List<string>() {"IOS", "Android", "Windows"};
List<string> listB = new List<string>() {"LINUS", "IOS"};

现在我需要比较listBlistA,并且我需要在不使用c#预定义方法的情况下跟踪listB中缺少的项目,如"Android", "Windows"

注释:每个列表只迭代一次。

请帮助我。

使用c# - Unsorted list在单个迭代中比较两个字符串列表

这可能是你可能找到的最优化的答案之一:

public static List<T> Except<T>(List<T> a, List<T> b)
{
    var hash = new HashSet<T>(b);
    var results = new List<T>(a.Count);
    foreach (var item in a)
    {
        if (!hash.Contains(item))
        {
            results.Add(item);
        }
    }
    return results;
}

不是直接从比较列表中获得的X x Y迭代,而是从迭代比较列表中获得X + Y - Y(当转换为哈希表时),以及在源列表上迭代的X(没有额外的Y,因为哈希表查找是常量时间)。

try this

var objectList3 = listA.Where(o => !listB.Contains(o)).ToList();

我不知道我是否完全正确(如果不是请纠正我),但这可能会有所帮助:

//Remove all elements of b from a 
foreach (string item in b)    
{
    a.Remove(item);
}

// check for all elements of a if they exist in b and store them in c if not
public static List<string> Excepts(List<string> a, List<string> b)
{
    List<string> c = new List<string>();
    foreach (string s1 in a)
    {
        bool found = false;
        foreach (string s2 in b)
        {
            if (s1 == s2)
            {
                found = true;
                break;
            }
        }
        if (!found)
            c.Add(s1);
    }
    return c;
}