Convert list to number range string

后端 未结 6 616
你的背包
你的背包 2020-12-05 19:45

This question is pretty much the opposite of this question: Does C# have built-in support for parsing page-number strings?

So given

1,3,5,6,7,8,9,10         


        
6条回答
  •  死守一世寂寞
    2020-12-05 20:50

    I know this is an old thread but thought I'd share my approach. This generates a list of ranges which can be easily converted to a single string.

    var numbers = new List() { 1, 3, 5, 6, 7, 8, 9, 10, 12 };
    var ranges = new List();
    
    if (numbers.Count == 0)
        return ranges;
    
    numbers = numbers.Distinct().ToList();
    numbers.Sort();
    
    int start = numbers[0];
    string range = start.ToString();
    
    for (int i = 1; i <= numbers.Count; i++)
    {
        if (i < numbers.Count && numbers[i] == numbers[i - 1] + 1)
        {
            range = $"{start} - {numbers[i]}";
            continue;
        }
    
        ranges.Add(range);
    
        if (i < numbers.Count)
        {
            start = numbers[i];
            range = start.ToString();
        }
    }
    
    var rangeString = string.Join(", ", ranges);  // Outputs: "1, 3, 5 - 10, 12"
    

提交回复
热议问题