数値のコレクション (コレクション) があり、任意のサイズにすることができ、負の数と正の数を含めることができます。いくつかの基準に基づいて分割しようとしています。コレクションの最初の数字から始めて、その数字が -180 を超えて 180 未満である間にコレクションを作成したいと考えています。数値が再び許容範囲内になると、それらは再び新しいコレクションに入れられます。問題は、コレクションを整理する必要があることです。
例えば。
100個のコレクションを取る:
- 最初の 50 は 180 から -180 の間です。
- 次の 20 は -180 未満です
- 次の 20 は 180 を超えています
- 最後の 10 個は 180 から -180 の間です
上記のコレクションから、元の 1 つのコレクションと同じ順序で 4 つの個別のコレクションが必要です。
- 180 から -180 までの元の順序での最初のコレクション番号
- -180 未満の元の順序での 2 番目のコレクション番号
- 180 を超える元の順序での 3 番目のコレクション番号
- 180 から -180 までの元の順序での 4 番目のコレクション番号
私は試みましたが、私が持っているものは機能せず、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>();
}
}
よろしくお願いいたします。