我有一个数字集合(Collection),它可以是任意大小,并且包含负数和正数。我试图根据一些标准将其拆分。从集合中的第一个数字开始,我想在该数字高于 -180 和低于 180 时进行集合。任何高于 180 的数字都将进入新集合,或者任何低于 -180 的数字将进入新集合。如果数字再次进入可接受的参数范围内,那么它们将再次进入新集合。问题是收藏品需要保持井井有条。
例如。
收集 100 个:
- 前 50 个介于 180 和 -180 之间。
- 接下来的20个低于-180
- 接下来的20个都在180以上
- 最后 10 个在 180 到 -180 之间
从上面的集合中,我现在应该有 4 个单独的集合,其顺序与原始 1 个集合的顺序相同。
- 原始顺序中的第一个集合编号在 180 和 -180 之间
- 原序中的第二个收集号低于-180
- 原序第三集编号180以上
- 原始顺序的第四个集合编号在 180 和 -180 之间
我做了一个尝试,我所拥有的不起作用,而且是一堆令人讨厌的 if 语句。我不太了解linq,但我认为使用它可能会有更优雅的解决方案。任何人都可以在这里帮助我,向我展示如何创建 linq 语句或建议如何让我的 if 语句工作,如果这是最好的方法。
Collection<Tuple<Collection<double>, int>> collectionOfDataSets = new Collection<Tuple<Collection<double>, int>>();
Collection<double> newDataSet = new Collection<double>();
for (int i = 0; i < dataSet.Count; i++) {
if (dataSet[i] < 180 && dataSet[i] > -180) {
newDataSet.Add(dataSet[i]);
} else {
Tuple<Collection<double>, int> lastEntry = collectionOfDataSets.LastOrDefault(b => b.Item2 == i--);
if (lastEntry != null){
lastEntry.Item1.Add(dataSet[i]);
}
double lastInLastCollection = collectionOfDataSets.ElementAtOrDefault(collectionOfDataSets.Count).Item1.Last();
if (newDataSet.Count > 0 && lastInLastCollection!= dataSet[i]){
collectionOfDataSets.Add(new Tuple<Collection<double>, int>(newDataSet, i));
}
newDataSet = new Collection<double>();
}
}
提前感谢您的任何帮助。