【发布时间】:2019-08-21 13:06:41
【问题描述】:
这不是 Given 2 C# Lists how to merge them and get only the non duplicated elements from both lists 的副本,因为他正在查看相同类型的列表。
我有这种情况:
class A
{
string id;
.... some other stuff
}
class B
{
string id;
.... some other stuff
}
我想从 A 和 B 中删除在两个列表之间共享一个 id 字段的元素。
我可以分 3 步完成:找到公共 id,然后从两个列表中删除记录,但我想知道是否有更优雅的方法。
编辑:预期输出
var A = [ 1, 3, 5, 7, 9 ] 变量 B = [ 1, 2, 3, 4, 5 ]
输出:
A = [ 7, 9 ] B = [ 2, 4 ]
但这仅显示 id 字段;如上所述,列表是不同类型的,它们只是共享 id。
【问题讨论】:
-
能否提供输入和预期输出
-
为一个/每个类编写您自己的
IComparer实现(参见support.microsoft.com/en-us/help/320727/…) -
id是字符串,比较没问题;问题是是否有办法在不执行 3 个步骤的情况下做到这一点
-
始终是 3 个步骤,但有一些方法可以通过使用
HashSets 来提高这些步骤的效率。为什么不展示你目前的表现。注意:由于您正在寻找“更好”的方式,这可能是codereview.stackexchange.com 上的一个更好的问题 -
计算机编程就是把问题分解成更小的问题,解决这些问题,然后组合解决方案。你已经做到了。你完成了!如果您希望您的三个步骤显示为一个步骤,请创建一个方法,将这三个步骤放入方法中,然后调用该方法,调用者会看到这是一个步骤。
标签: c#