C# - 使用LINQ将两个变量转换为二维数组?

Dar*_*ine 6 c# linq

我有一个带有两个变量"startLocation"和"endLocation"的"region"类的列表<>.我想将这两者组合成一个新的有序二维数组,其中只有Location和一个表示其开始或结束的整数.

例如,如果列表包含三个区域对象

[区域1]:startLocation = 5,endLocation = 7

[Region 2]:startLocation = 3,endLocation = 5

[Region 3]:startLocation = 8,endLocation = 9

我想得到一个排序的二维数组(或列表或类似)看起来像:

[3] [1]

[5] [1]

[5] [-1]

[7] [-1]

[8] [1]

[9] [-1]

(最好我喜欢将重叠的第二个值加在一起,所以数组中的两个独立的5将组合成[5 0] ......但这并不太重要)

我目前正在使用常规的forloop逐个浏览并将它们一次添加到列表中.这个实现很慢,因为我正在处理大型数据集,我猜测有一种更优雅/更快的方法可以通过LINQ实现这一点.

任何建议将不胜感激.

Jar*_*Par 5

你需要定义一个辅助方法,将一个区域分成两个部分,使用一个新结构和一个二维数组来表示它更容易

struct Data {
  public int Value;
  public bool IsStart;
}

public static IEnumerable<Data> Split(this Region region) {
  yield return new Data() { Value = region.StartLocation, IsStart=true};
  yield return new Data() { Value = region.EndLocation, IsStart=false};
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下LINQ查询来分解它们并对它们进行排序.

List<Region> list = GetTheList();
var query = list
  .SelectMany(x =>  x.Split())
  .OrderBy(x => x.Data);
Run Code Online (Sandbox Code Playgroud)