我知道这个问题已经被重复了多次,我认为在使用引用类型列表时这很简单。这也是大多数问题所谈论的。在对值类型执行此操作时,我无法完全弄清楚。
我想做的是接收一个传入的请求,并确保该请求的至少与已经存在的<em]相同。允许额外的号码,并且请求中的额外号码将被持久化。因此,如果[1,2]
已经被持久化,并且请求包含[1,2,3]
,则3
将被持久化。如果请求只包含1
或2
,则这将是无效的,并且[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
。