Csharp/C#教程:使用LINQ根据它们将包含的已知子字符串对字符串列表进行分组分享


使用LINQ根据它们将包含的已知子字符串对字符串列表进行分组

我有一个已知的字符串列表,如下所示:

List groupNames = new List(){"Group1","Group2","Group3"}; 

我还有一个事先不知道的字符串列表,如下所示:

 List dataList = new List() { "Group1.SomeOtherText", "Group1.SomeOtherText2", "Group3.MoreText", "Group2.EvenMoreText" }; 

我想做一个LINQ语句,它将获取dataList并将其转换为匿名对象或具有组名的Key的字典和包含该组中字符串列表的Value。 目的是循环遍历组并在组列表上进行内部循环,并根据字符串所在的字符串对字符串执行不同的操作。

我想要一个看起来像这样的数据结构:

 var grouped = new { new { Key="Group1", DataList=new List() { "Group1.SomeOtherText", "Group1.SomeOtherText2" } }, new { Key="Group2", DataList=new List() { "Group2.EvenMoreText" } } ... }; 

我知道我可以循环遍历dataList,然后检查每个字符串是否包含组名,然后将它们添加到单个列表中,但我正在尝试学习LINQ执行此类任务的方式。

提前致谢。

编辑:

刚才有了另一个想法……如果我的团体免费精选名字大全在Enum中怎么办?

 public enum Groups { Group1, Group2, Group3 } 

我怎么会把它变成一个词典>?

这是我正在尝试但我不知道如何形成ToDictionary部分

 Dictionary<Groups,List> groupedDictionary = (from groupName in Enum.GetNames(typeof(Groups)) from data in dataList where data.Contains(groupName) group data by groupName).ToDictionary<Groups,List>(...NOT SURE WHAT TO PUT HERE....); 

编辑2:

找到了Enum问题的解决方案:

 var enumType = typeof(Groups); Dictionary<Groups,List> query = (from groupName in Enum.GetValues(enumType).Cast() from data in dataList where data.Contains(Enum.GetName(enumType, groupName)) group data by groupName).ToDictionary(x => x.Key, x=> x.ToList()); 

看起来像:

 var query = from groupName in groupNames from data in dataList where data.StartsWith(groupName) group data by groupName; 

请注意,这不是连接,因为可能存在重叠的组名“G”和“Gr”,因此项可以匹配多个组名。 如果您可以从每个项目中提取组名称(例如,通过在第一个点之前获取所有内容),那么您可以使用“join … into”来获得组加入。 无论如何…

然后:

 foreach (var result in query) { Console.WriteLine("Key: {0}", result.Key); foreach (var item in result) { Console.WriteLine(" " + item); } } 

如果你真的需要匿名类型,你可以做…

上述就是C#学习教程:使用LINQ根据它们将包含的已知子字符串对字符串列表进行分组分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 var query = from groupName in groupNames from data in dataList where data.StartsWith(groupName) group data by groupName into g select new { g.Key, DataList = g.ToList() }; 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/998794.html

(0)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐