从 C# 列表中选择唯一元素
如何从列表 {0, 1, 2, 2, 2, 3, 4, 4, 5}
中选择唯一元素,以便获得 {0, 1, 3, 5}
,有效删除重复元素{2, 4}
的所有实例?
How do I select the unique elements from the list {0, 1, 2, 2, 2, 3, 4, 4, 5}
so that I get {0, 1, 3, 5}
, effectively removing all instances of the repeated elements {2, 4}
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
确保您使用的是 Linq 和 .NET Framework 3.5。
make sure you're using Linq and .NET framework 3.5.
与拉姆达..
With lambda..
C#2.0解决方案:
C# 2.0 solution:
如果您的列表中有复杂类型对象并且想要获取属性的唯一值,那么这里是另一种有效的方法:
或者获取不同的值:
如果您的属性也是复杂类型,您可以为 Distinct( 创建一个自定义比较器),例如 Distinct(OrderComparer),其中 OrderComparer 可能如下所示:
Here is another way that works if you have complex type objects in your List and want to get the unique values of a property:
Or to get distinct values:
If your property is also a complex type you can create a custom comparer for the Distinct(), such as Distinct(OrderComparer), where OrderComparer could look like:
如果您无法使用 Linq,因为您必须支持无法升级的旧代码,则声明一个字典,其中第一个 int 是数字,第二个 int 是出现次数。 循环浏览您的列表,加载您的词典。 完成后,循环遍历字典,仅选择出现次数为 1 的元素。
If Linq isn't available to you because you have to support legacy code that can't be upgraded, then declare a Dictionary, where the first int is the number and the second int is the number of occurences. Loop through your List, loading up your Dictionary. When you're done, loop through your Dictionary selecting only those elements where the number of occurences is 1.
我相信马特的意思是:
I believe Matt meant to say:
剥猫皮的方法有很多种,但 HashSet 似乎就是为这个任务而生的。
输出:
0 1 2 3 4 5
There are many ways to skin a cat, but HashSet seems made for the task here.
The output:
0 1 2 3 4 5
这是一个没有 LINQ 的解决方案:
打印:
Here's a solution with no LINQ:
This prints:
在 .Net 2.0 中,我非常确定这个解决方案:
In .Net 2.0 I`m pretty sure about this solution: