使用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"};
现在我需要比较listB与listA,并且我需要在不使用c#预定义方法的情况下跟踪listB
中缺少的项目,如"Android", "Windows"
。
注释:每个列表只迭代一次。
请帮助我。
这可能是你可能找到的最优化的答案之一:
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;
}