从源数组中选择给定的索引范围

etr*_*pja 1 .net c# arrays

我想创建一个包含数组索引的数组.假设我有一个这样的数组:

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Run Code Online (Sandbox Code Playgroud)

我从查询中得到的结果如下:

在此输入图像描述

这意味着地方1,3, 4(LengthUnit= 2)和7忙碌(已经采取).所以,数组现在看起来像:

| T | 2 | T | T | 5 | 6 | T | 8 | 9 | 10 |
Run Code Online (Sandbox Code Playgroud)

在哪里,T代表采取.

如何使用查询结果创建两个整数数组,如下所示:

int[] taken = { 1, 3, 4, 7 };
int[] notTaken = { 2, 5, 6, 8, 9, 10 };
Run Code Online (Sandbox Code Playgroud)

Pat*_*man 5

Enumerable.Range 证明在这种情况下有用:

Dictionary<int, int> startAndLength = new Dictionary<int, int>()
                                      { { 1, 1 }, { 3, 2 }, { 7, 1 } };

int[] taken = startAndLength
              .SelectMany(kvp => Enumerable.Range(kvp.Key, kvp.Value)).ToArray();

int[] notTaken = Enumerable.Range(0, 10).Except(taken).ToArray();
Run Code Online (Sandbox Code Playgroud)

开始创建一组开始和长度,然后使用确定所拍摄的项目Enumerable.Range.然后Enumerable.Range再次使用以确定拍摄的项目.