在字符串列表中使用LINQ查询分组

6

我对使用C#的Linq查询非常陌生。我有一个字符串列表,并希望获取一个新的列表或删除所有重复的字符串。

List<string> zipcodes = new List<string>();
zipcodes.Add("1234");
zipcodes.Add("1234");
zipcodes.Add("1234");
zipcodes.Add("4321");
zipcodes.Add("4321");

List<string> groupbyzipcodes =
(from zip in zipcodes
group zip by zip into newgroup
select newgroup.ToList());

无法隐式转换类型'System.collection.Generic.IEnumarable<System.Collections.Generic.List<string>''System.collections.Generic.List<string>。存在显式转换(是否缺少强制转换?)
5个回答

13

不错!但这会在哪里使用? - kimiahdri

5

这是最有效的去重方法。

var groupbyzipcodes = new HashSet<string>(zipcodes);

我已经在这里讨论了这个问题(HashSet vs Distinct())。


一个有趣的阅读材料: https://dev59.com/Tm015IYBdhLWcg3w9gfh - William Moore
2
有趣的是,我本以为distinct会以最有效的方式实现。个人认为distinct更易读,但这取决于应用程序的性能要求。 - William Moore

2

2
如果您只有一个字符串列表,您可以使用distinct()函数来去除重复项。
zipcodes.Distinct();

它将为您提供列表的唯一值

此致


2

其他人已经回答过了 - 存在Distinct可以从IEnumerable<T>中获取不同的列表。

您的具体问题是,您在括号内使用了ToList(),而它应该在外面。

List<string> groupbyzipcodes =
(from zip in zipcodes
group zip by zip into newgroup
select newgroup.ToList())

应该已经完成
List<string> groupbyzipcodes =
(from zip in zipcodes
group zip by zip into newgroup
select newgroup.Key).ToList();

1
尝试运行此代码,您将得到“无法将类型'System.Collections.Generic.List<System.Linq.IGrouping<string,string>>'隐式转换为'System.Collections.Generic.List<string>'”。 您需要执行“select newgroup.Key”才能使其正常工作。 - Chris
@Chris - 谢谢,发现得好。 - Jamiec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接