Ran*_*hot 2 c# vb.net arrays string range
我有一个字符串 "2-6,8,10-15,20-23"
我需要将其转换为数组中完全填充的数字范围,如下所示:
{2,3,4,5,6,8,10,11,12,13,14,15,20,21,22,23}
Run Code Online (Sandbox Code Playgroud)
你有什么想法如何转换它吗?
小智 6
Mark Heath 在 PluralSight 上有一门关于 LINQ 的课程,很好地解决了这个问题。使用 LINQ,您可以使用下面显示的示例快速完成此操作。
string value = "7-10,2,5,12,17-18";
var result = value.Split(',')
.Select(x => x.Split('-'))
.Select(p => new { First = int.Parse(p.First()), Last = int.Parse(p.Last()) })
.SelectMany(x => Enumerable.Range(x.First, x.Last - x.First + 1))
.OrderBy(z=>z);
Run Code Online (Sandbox Code Playgroud)
在Split创建字符串的数组进行。第一个Select创建一个数组,每个数组有 1 或 2 个元素。第二个Select创建一个匿名类型,根据数组值指示起始值和结束值。的SelectMany使用Enumerable.Range方法,以从每个匿名对象创建数字的范围,然后将其合并为一个IEnumerable整数的集合。最后,OrderBy将数字按顺序用于报告和其他用途。