c# - 如何使用 Linq 根据一个相等的值和一个不同的值删除重复项?
问题描述
我有一堂课
class Foo{
string valueOne;
string valueTwo;
}
我在列表中有多个 Foo 对象。这些对象已经是不同的。但是,如果有另一个具有相等 valueOne 和 valueTwo == null 的对象,我也想删除对象。保证在 valueOne 中始终只有最大一个具有相同值的其他“重复”。可以有一个或多个对象具有相同的 valueOne,但 valueTwo 中的值不同。
例如:
var foo1 = new Foo{
valueOne = "Equal Value",
valueTwo = "Some value"
};
var foo2 = new Foo{
valueOne = "Equal Value",
valueTwo = "Different value"
};
var foo3 = new Foo{
valueOne = "Equal Value",
valueTwo = null
};
var foo4 = new Foo{
valueOne = "SomeOtherValue",
valueTwo = "whatever"
};
var foo5 = new Foo{
valueOne = "I have null value, but should still be in list",
valueTwo = null
};
在删除具有空值的重复项后,我应该有:
foo1:
valueOne = "Equal Value"
valueTwo = "Different"
foo2:
valueOne = "Equal Value"
valueTwo = "Different value"
foo4:
valueOne = "SomeOther Value"
valueTwo = "whatever"
foo5
valueOne = "I have null value, but should still be in list"
valueTwo = null
所以基本上: Foo 对象可以保留在 valueTwo == null 的列表中,前提是没有另一个具有相同 valueOne 的对象。
我通过使用嵌套循环遍历列表并存储重复项的索引,然后遍历索引并在列表上使用 RemoveAt(index) 使其工作。然而,这确实是一个又长又丑的代码。有没有办法用 Linq 做到这一点?我是 C# 和 Linq 的新手,但希望这可行!
谢谢你的帮助!
编辑:为了更清楚起见,我已经在列表中调用了 GroupBy,使其与众不同。
编辑2:该死,我的解释不清楚。可以有一个或多个对象具有相同的 valueOne,但 valueTwo 中的值不同。不保证在 valueOne 中始终只有最大一个具有相同值的其他“重复”。
尽管可以保证每个 Foo 对象都有一个不同的 valueOne,但只有一个其他 Foo 对象具有相同的 valueOne,但 valueTwo 为 null。如果这有意义..
解决方案
推荐阅读
- assembly - 如何在没有可用操作系统的情况下获取硬件信息
- webstorm - WebStorm HTML - 当对象“打印机”的类型未知时,推断 Prettier 的“打印机”类型
- c++ - 如何在VS中的终端输出末尾删除“%”
- c++ - 搜索使用对应值稍后用于排序的键时的最佳复杂度
- java - 为随机二维 java 数组问题创建用户输入 - OutOfBoundsException
- html - 在 VScode 中,当我使用快捷键 Ctrl + / 在 HTML 文件中进行注释时,它不能像这样 "{{! }}"
- android - 从 GitLab 读取 build.gradle 上的环境变量
- diff - WinMerge如何停止遍历链接
- flutter - 如何在颤振应用程序中使用 bloc 添加抽屉导航器?
- java - 在 Spring Boot 中上传 CSV - 找不到标题名称“XXXXX”