需要将数字符号范围转换为逗号分隔值?

San*_*r M 0 c#-4.0

我的意见是

string PageRange = "1,2-5,9";
Run Code Online (Sandbox Code Playgroud)

我需要将它们转换成

string TotalRange = "1,2,3,4,5,9";
Run Code Online (Sandbox Code Playgroud)

请分享您的想法.

Ser*_*kiy 7

非LINQ解决方案:以下方法处理输入字符串并用数字序列替换范围:

static IEnumerable<int> RangeToSequence(string input)
{            
    string[] parts = input.Split(',');
    foreach (var part in parts)
    {
        if (!part.Contains('-')) // simple number, just return it
        {
            yield return Int32.Parse(part);
            continue;
        }
        // otherwise we have range
        string[] rangeParts = part.Split('-');
        int start = Int32.Parse(rangeParts[0]);
        int end = Int32.Parse(rangeParts[1]);

        while (start <= end)
        {
            yield return start; 
            start++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以创建字符串:

var result = String.Join(",", RangeToSequence(PageRange));
Run Code Online (Sandbox Code Playgroud)

Linq解决方案:您可以将简单数字视为仅限启动的范围.因此,您可以使用SelectMany从每个部分中选择范围:

var numbers = from part in PageRange.Split(',')
              let range = part.Split('-')
              let start = Int32.Parse(range[0])
              let end = Int32.Parse(range[range.Length - 1])
              from i in Enumerable.Range(start, end - start + 1)
              select i;

string result = String.Join(",", numbers);
Run Code Online (Sandbox Code Playgroud)