比较 int 的列表,同时考虑两个 int 在重复时不相等

Comparing lists of ints in, while considering two ints not to be equal if repeated

提问人:jokarl 提问时间:9/15/2022 更新时间:9/15/2022 访问量:41

问:

我知道这个问题已经多次重申,我认为在使用引用类型列表时这很简单。这也是大多数问题所谈论的。当使用值类型执行此操作时,我不太清楚。

我想做的是接受一个传入的请求,并确保该请求至少具有已经存在的相同数字。允许使用其他号码,并且请求中的其他号码将保留。因此,如果已经持久化并且请求包含 ,将被持久化。如果请求仅包含 或 ,则该请求将无效,并且将有效,并且仅返回已存在的数据。[1,2][1,2,3]312[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

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

在处理这个问题时,任何关于我应该如何思考的帮助将不胜感激。效率并不那么重要,因为列表根本不包含很多元素。

C# 列表 相等 值类型

评论

0赞 Oliver 9/15/2022
据我了解,我们有两个来源(传入数字,已经保留的数字)和一个结果(传出数字)。您能否写下描述输入列表和预期结果的表格或类似的东西(例如?如果需要,也许也可以作为输出或类似的东西。([1,2], [1,2,4]) -> [1,2,4]error

答:

2赞 Yitz 9/15/2022 #1

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

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

actuallyExisted如果找不到要删除的内容,则为 false。 现在将包含所有不存在的 s。erequestint

评论

0赞 jokarl 9/15/2022
我有点生气,因为当这解决了我的问题时,我盲目地盯着效用函数
0赞 Yitz 9/15/2022
是的,不必关心效率,可以让你想到老式的简单做事方式......
0赞 jokarl 9/15/2022
由于简单性以及我的整体技能水平以及我的团队,我最终选择了类似的事情。谢谢!