C# - 使用 LINQ 将两个变量放入二维数组中?

标签 c# linq

我有一个包含两个变量“startLocation”和“endLocation”的“region”类的列表<>。 我想将这两个组合成一个新的排序二维数组,其中它只是 Location 和一个表示它的开始还是结束的整数。

例如,如果列表具有三个区域对象

[Region 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 来完成。

如有任何建议,我们将不胜感激。

最佳答案

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

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};
}

然后您可以使用以下 LINQ 查询将它们分解并排序。

List<Region> list = GetTheList();
var query = list
  .SelectMany(x =>  x.Split())
  .OrderBy(x => x.Data);

关于C# - 使用 LINQ 将两个变量放入二维数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/822717/

相关文章:

c# - 可重复的复杂正则表达式,带点 '.' 分隔符

c# - 如何将方法扩展到一个类而不是它的实例

c# - LINQ TO SQL 中的查询未插入

C# 将两个集合连接在一起

c# - 如何将包含 "NOT IN"约束的 SQL 语句转换为其等效的 LINQ?

c# - 使用 Navmesh 和协程的基本 RTS 运动?

c# - jquery 拖放与 asp.net c# 功能

c# - 使用 Sitecore.FakeDb 的单元测试在 GetItem 上抛出 Sitecore.Nexus 实例化错误

c# - 如果对象为 null,则返回空字符串

c# - 多列分组