给定一个这样的字符串列表
“Val.1.ValueA”
"Val.1.ValueB"
"Val.1.ValueC"
"Val.2.ValueA"
"Val.2.ValueB"
"Val.2.ValueC"
"Val.3.ValueA"
"Val.3.ValueB"
“Val.3.ValueC”
如何编写 linq groupby 语句以按字符串的第一部分(包括数字)进行分组?换句话说,在上述情况下,我想要一个包含 3 个组 Val.1、Val.2、Val.3 的列表
最佳答案
使用 String.Split()
定义您的组键:
var groups = myList.GroupBy(x => { var parts = x.Split('.');
return parts[0] + parts[1]; });
无论 key 的两个部分(点之前和之后)的长度如何,这都有效。
编辑以回应评论:
听起来你想按字符串中的数字进行分组,但你事先并不知道数字的组成部分。在这种情况下,这应该有效:
var groups = myList.GroupBy(x =>
{
var parts = x.Split('.'));
int num = 0;
return parts[0] + parts.Where(p => p.All(char.IsDigit)
.First( p => int.TryParse(p, out num));
}
);
关于C# Linq GroupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902093/