所以我有一个位置列表。如果每个位置之间的距离大于30,则需要拆分列表。
我可以遍历列表并获得每个位置之间的距离,我只是不确定分割列表的最佳方法是什么,我已经阅读了将列表分成一定大小的答案的答案,但是在我看来情况下,大小可能会根据位置之间的距离而变化。
这可能非常简单,我看不到。我到目前为止的内容在下面,代码在比较这两项时非常简单,将我所停留的列表完全分开。目前,我的代码不会包含原始列表中的所有项目,而是会排除第一个GetRange之前的项目。
var unkownSegments = grouped.Where(x => x.ActivityType == null);
foreach (var group in unkownSegments)
{
var tempLists = new List<List<LocationResult>>();
for (int i = 0; i < group.Items.Count - 1; i++)
{
var point1 = group.Items[i];
var point2 = group.Items[i + 1];
var sCoord = new GeoCoordinate(point1.Lat, point1.Long);
var eCoord = new GeoCoordinate(point2.Lat, point2.Long);
var distance = sCoord.GetDistanceTo(eCoord);
if(distance > 30)
{
var tempList = group.Items.GetRange(i, group.Items.Count - i);
tempLists.Add(tempList);
}
}
}
感谢您的帮助或建议。
答案 0 :(得分:1)
要创建范围(使用GetRange()
方法),您需要知道它的开始位置和结束位置。如果Item[i]
和Item[i+1]
之间的距离大于30
,则您知道 end ,因为该 end 位于索引{{ 1}}。但是您不知道开始(当然,您在第一个范围内就知道它-i
),因为开始取决于前一个范围的结束。因此,您需要引入新的变量(在我的示例中称为0
),其中将包含此类信息。它从值rangeStart
开始(这是第一个范围始终开始的位置),然后在您添加新范围时更新它的值(下一个范围始终从索引0
开始)。
i+1
循环结束后,将保留一些点。因此需要将它们添加为最后一个范围。整个方法如下所示:
for