我有一个包含两个变量“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/