float (昇順) の順序付きリストがあるとします。
次の要素とそれ自体の差が特定のしきい値未満である各要素を削除したいと思います。
私はこのようなものが必要です:
List<float> orderedList;
IEnumerable<float> query = orderedList.Where(currentNum , nextNum => nextNum - currentNum < threshold);
それは可能ですか?はいの場合、どのように?
float (昇順) の順序付きリストがあるとします。
次の要素とそれ自体の差が特定のしきい値未満である各要素を削除したいと思います。
私はこのようなものが必要です:
List<float> orderedList;
IEnumerable<float> query = orderedList.Where(currentNum , nextNum => nextNum - currentNum < threshold);
それは可能ですか?はいの場合、どのように?
これを試してみてください:
var filteredElements = new List<float>();
float ? prev = null;
orderedList.ToList().ForEach((e)=>{
if (prev.HasValue)
{
if (e-prev >= threshold)
filteredElements.Add(prev.Value);
}
prev = e
});
代わりにこれを試してください:
var ls1 = ls.Where((item, index) =>
item - ls[ls.Count == index + 1 ? index : index + 1] >= 0);
これが役立つことを願っています!!
これを試して -
List<float> orderedList = new List<float>() { 12, 14, 34, 45 };
List<float> itemsToRemove = orderedList.Where((item, index) =>
index < orderedList.Count - 1 &&
orderedList[index + 1] - item < threshhold).ToList();
これはうまくいくようです。(ただし、質問には誤解される可能性のある意味がいくつかあります。)
var input = new List<float>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 18, 21, 24, 27, 29, 35, 40, 46, 59 };
var output = input.Zip(input.Skip(1).Concat(new[]{float.MaxValue}), (a, b) => new { a, b }).Where(x => x.b - x.a > 2).Select(x => x.a);
これにより、次の出力が生成されます。
15, 18, 21, 24, 29, 35, 40, 46, 59
これには、任意のIEnumerable
.