C# 我有一个数字区域的列表,我想建立一个所有数字的列表,我怎么做?

C# 我有一个数字区域的列表,我想建立一个所有数字的列表,我怎么做?,c#,C#,我有一个列表,如下所示: in index[0] "Test 0 Length 32 [41 - 73]" in index[1] "Test 1 Length 22 [81 - 103]" 等等 我需要从每个索引中得到所有的数字。例如,在新列表中,我需要有:41,42,43,44,45,46,47…73,然后从索引[1]中获取数字,在新列表中73之后继续81,82,83,84,85…103 因此,新的列表将包含所有的数字 要计算长度(例如32或22),请执行以下操作: int len = L

我有一个列表,如下所示:

in index[0] "Test 0 Length 32 [41 - 73]"
in index[1] "Test 1 Length 22 [81 - 103]"
等等

我需要从每个索引中得到所有的数字。例如,在新列表中,我需要有:41,42,43,44,45,46,47…73,然后从索引[1]中获取数字,在新列表中73之后继续81,82,83,84,85…103

因此,新的列表将包含所有的数字

要计算长度(例如32或22),请执行以下操作:

int len = LR[i].end - LR[i].start;
Lr[i]。结束是73,而Lr[i]。开始是41

所以我需要计算并得到41和73之间的所有数字,包括41和73,并将它们添加到一个新列表中,然后添加到下一个itertion,其中LR[i]。end是103,start是81,然后再次获得数字并将它们添加到列表中

因此,最终列表将包含一大行中的所有数字


我怎么做呢?

我不确定LR的内容是什么,但我假设您的范围号是有效的整数(否则,您必须使用regex或String.IndexOf来查找它们)

但是,如果您有对象列表,其中的对象如下所示:

class pairs
{  
int item1;   
int item2;    
}  
然后您可以轻松地执行以下操作(请参见)
可枚举。范围接受两个参数:开始和计数。要获得计数,我们必须从下限中减去上限,再加上一以包含上限值:

var values = new List<int>();
list.ForEach(x =>values.AddRange(Enumerable.Range(x.Item1, x.Item2 - x.Item1 + 1)));
var值=新列表();
ForEach(x=>values.AddRange(Enumerable.Range(x.Item1,x.Item2-x.Item1+1));
工作控制台应用程序使用:

var list=newlist();
list.Add(Tuple.Create(41,73));
list.Add(Tuple.Create(81103));
list.Add(Tuple.Create(120150));
//现在我们有三对值。41-73, 81-103, 120-150
//现在我们可以循环遍历列表并使用Enumerable.Range生成序列,如下所示:
var值=新列表();
ForEach(x=>values.AddRange(Enumerable.Range(x.Item1,x.Item2-x.Item1+1));
//并打印项目。
values.ForEach(x=>Console.WriteLine(x));
//将打印41、42、43…73、81、82、83…103、120、121…150

SelectMany将为您提供一系列串联的子序列,因此下面将为您提供每个范围内所有数字的列表

ranges.SelectMany(r => Enumerable.Range(r.start, r.end - r.start + 1)).ToList();
List List=新列表()
{
“测试0长度32[41-73]”,
“测试1长度22[81-103]”
};
变量编号=
list.SelectMany(
s=>Regex.Matches(s,@“\[(\d+[-]+(\d+\]))
.Cast()
.Select(m=>m.Groups.Cast()。跳过(1)。选择(x=>x.Value)
.ToArray())
.Select(x=>new{start=int.Parse(x[0]),end=int.Parse(x[1]))
.SelectMany(x=>Enumerable.Range(x.start,x.end-x.start+1))
)
.ToList();

您能显示LR的内容吗?不错,但您的第一个选择似乎是多余的。为什么不直接在下一个选择中访问这些组?@Rawling只是为了让它更容易阅读。事实上,两个
select
s和
SelectMany
也可以组合使用。(见答案的第一版)
ranges.SelectMany(r => Enumerable.Range(r.start, r.end - r.start + 1)).ToList();
List<string> list = new List<string>()
{
    "Test 0 Length 32 [41 - 73]",
    "Test 1 Length 22 [81 - 103]"
};

var numbers = 
   list.SelectMany(
          s => Regex.Matches(s, @"\[(\d+)[ -]+(\d+)\]")
               .Cast<Match>()
               .Select(m => m.Groups.Cast<Group>().Skip(1).Select(x=>x.Value)
                                                          .ToArray())
               .Select(x => new {start=int.Parse(x[0]), end=int.Parse(x[1]) })
               .SelectMany(x => Enumerable.Range(x.start, x.end- x.start + 1))
        )
       .ToList();