比较中的int列表,同时考虑两个int如果重复则不相等



我知道这个问题已经被重复了多次,我认为在使用引用类型列表时这很简单。这也是大多数问题所谈论的。在对值类型执行此操作时,我无法完全弄清楚。

我想做的是接收一个传入的请求,并确保该请求的至少与已经存在的<em]相同。允许额外的号码,并且请求中的额外号码将被持久化。因此,如果[1,2]已经被持久化,并且请求包含[1,2,3],则3将被持久化。如果请求只包含12,则这将是无效的,并且[1,2]将是有效的,并且只返回已经存在的数据。>

上面提到的最后一个案例我采用了以下方式:

Enumerable.SequenceEqual(existing.OrderBy(e => e), request.OrderBy(e => e));

当列表不相等时,我想把列表中的每个int都当作唯一的,但我不知道如何做到这一点。在下面的示例中,我希望得到的列表是[1, 4],但它最终是[4],因为现有列表中的两个数字1由于相等而被排除在外。

var existing = new List<int> { 1, 1, 2, 3, 4 };
var request = new List<int> { 1, 2, 3 };
existing.Except(request).ToList();
// 4

我已经看到Except接受IEqualityComparer,但我在尝试为值类型实现这一点时遇到了困难,我不知道这是否是正确的方法。

如果能为我在处理这个问题时的想法提供任何帮助,我们将不胜感激。效率并没有那么重要,因为清单根本不会包含太多要素。

您可以使用常规List<T>.Remove(T):

foreach(var e in existing)
{
var actuallyExisted = request.Remove(e);
}

如果找不到要删除的e,则actuallyExisted将为false。request现在将包含所有不存在的int

最新更新