我有一个带有两个变量"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实现这一点.
任何建议将不胜感激.
你需要定义一个辅助方法,将一个区域分成两个部分,使用一个新结构和一个二维数组来表示它更容易
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)
归档时间: |
|
查看次数: |
2826 次 |
最近记录: |