c# - 将数字序列转换为范围

标签 c#

我在 C# 中有以下字符串:

string a="1,2,3,4,5,6,7,8,9,10,22,45,66,88,100,101,102,103,104,105,140,199";

我想生成以下输出:

1-10,22,45,66,88,100-105,140,​​199这样把连续的数字分到区间

"initialnumber-endnumber"并保持其他不变。

你能帮我一下吗?

提前致谢。

最佳答案

IEnumerable<string> Rangify(IList<int> input) {
    for (int i = 0; i < input.Count; ) {
        var start = input[i];
        int size = 1;
        while (++i < input.Count && input[i] == start + size)
            size++;

        if (size == 1)
            yield return start.ToString();
        else if (size == 2) {
            yield return start.ToString();
            yield return (start + 1).ToString();
        } else if (size > 2)
            yield return start + " - " + (start + size - 1);
    }
}

关于c# - 将数字序列转换为范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11956780/

相关文章:

c# - 未知服务器标记 'EPiServerUI:ToolButton'

c# - LINQ SQL 查询,SubmitChanges 未将更改提交到数据库

c# - 在 C# 中比较多组数据重叠的最有效方法是什么

c# - ASP MVC 5 日期格式验证问题

c# - 在 LinkedList C# 中查找元素的索引

c# - 将 DateTime 格式化为字符串

c# - 注销功能

c# - ValueInjecter:如何在执行 .InjectFrom<UnflatLoopValueInjection>(data) 时忽略某些属性?

c# - 处理大量文本字符串

c# - 如何展平包含相关类的 IEnumerable 的类