gpt4 book ai didi

c# - 比较两组新键和缺失键

转载 作者:太空狗 更新时间:2023-10-29 22:34:48 24 4
gpt4 key购买 nike

比较 C# 中的两个键值字典集:集合 A 和集合 B,枚举集合 A 中存在但集合 B 中缺少的键的最佳方法是什么,反之亦然?

例如:

A = { 1, 2, 5 }
B = { 2, 3, 5 }

比较 B 和 A,缺少的键 = { 1 } 和新的键 = { 3 }。

使用 Dictionary<...,...>对象,可以枚举 B 中的所有值并使用 A.ContainsKey(key); 对集合 A 进行测试,但感觉应该有更好的方法可能涉及排序集?

最佳答案

我知道有两种设置差异的内置方法。

1) Enumerable.Except

Produces the set difference of two sequences by using the default equality comparer to compare values.

例子:

IEnumerable<int> a = new int[] { 1, 2, 5 };
IEnumerable<int> b = new int[] { 2, 3, 5 };

foreach (int x in a.Except(b))
{
Console.WriteLine(x); // prints "1"
}

2a) HashSet<T>.ExceptWith

Removes all elements in the specified collection from the current HashSet<T> object.

HashSet<int> a = new HashSet<int> { 1, 2, 5 };
HashSet<int> b = new HashSet<int> { 2, 3, 5 };

a.ExceptWith(b);

foreach (int x in a)
{
Console.WriteLine(x); // prints "1"
}

2b) HashSet<T>.SymmetricExceptWith

Modifies the current HashSet<T> object to contain only elements that are present either in that object or in the specified collection, but not both.

HashSet<int> a = new HashSet<int> { 1, 2, 5 };
HashSet<int> b = new HashSet<int> { 2, 3, 5 };

a.SymmetricExceptWith(b);

foreach (int x in a)
{
Console.WriteLine(x); // prints "1" and "3"
}

如果您需要更高性能的东西,您可能需要推出自己的集合类型。

关于c# - 比较两组新键和缺失键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3746268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com