首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字符串中的数字范围转换为整数列表

将字符串中的数字范围转换为整数列表
EN

Stack Overflow用户
提问于 2013-11-10 12:32:17
回答 5查看 4.5K关注 0票数 2

我有一个字符串"2-6,8,10-15,20-23"

我需要将其转换为数组中完全填充的数字范围,如下所示:

代码语言:javascript
运行
复制
{2,3,4,5,6,8,10,11,12,13,14,15,20,21,22,23}

你有什么想法如何转换它吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-11-10 13:05:16

这段代码应该能做到这一点(在注释中描述了这个过程):

代码语言:javascript
运行
复制
Dim s As String = "2-6,8,10-15,20-23" 'Your values
Dim values As New List(Of Integer)() 'Create an List of Integer values / numbers
For Each value As String In s.Split(","C) ' Go through each string between a comma
If value.Contains("-"C) Then 'If this string contains a hyphen
    Dim begin As Integer = Convert.ToInt32(value.Split("-"C)(0)) 'split it to get the beginning value (in the first case 2)
    Dim [end] As Integer = Convert.ToInt32(value.Split("-"C)(1)) ' and to get the ending value (in the first case 6)
    For i As Integer = begin To [end] 'Then fill the integer List with values
        values.Add(i) 
    Next
Else
      values.Add(Convert.ToInt32(value)) 'If the text doesn't contain a hyphen, simply add the value to the integer List
End If
Next
票数 3
EN

Stack Overflow用户

发布于 2016-05-13 15:18:47

Mark在PluralSight有一门关于LINQ的课程,很好地解决了这个问题。使用LINQ,您可以使用下面的示例快速完成此操作。

代码语言:javascript
运行
复制
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);

Split从字符串中创建一个数组。第一个Select创建一个数组,每个数组有一个或两个元素。第二个Select创建一个匿名类型,根据数组值指示起始值和结束值。SelectMany使用Enumerable.Range方法从每个匿名对象创建一系列数字,然后将其扁平化为整数的IEnumerable集合。最后,OrderBy将数字放在报告和其他用途上。

票数 9
EN

Stack Overflow用户

发布于 2013-11-13 13:15:35

代码语言:javascript
运行
复制
 string numberString = "2-6,8,10-15,20-23";

 List<int> cNumberString = getValidString(numberString);

 List<int> getValidString(string str)
        {
            List<int> lstNumber = new List<int>();

            string[] cNumberArray = str.Split(',');

            for (int k = 0; k < cNumberArray.Length; k++)
            {
                string tmpDigit = cNumberArray[k];
                if (tmpDigit.Contains("-"))
                {
                    int start = int.Parse(tmpDigit.Split('-')[0].ToString());
                    int end = int.Parse(tmpDigit.Split('-')[1]);

                    for (int j = start; j <= end; j++)
                    {
                        if (!lstNumber.Contains(j))
                            lstNumber.Add(j);
                    }
                }
                else
                {
                    lstNumber.Add(int.Parse(tmpDigit));
                }
            }

            return lstNumber;
        }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19889720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档