1

float (昇順) の順序付きリストがあるとします。

次の要素とそれ自体の差が特定のしきい値未満である各要素を削除したいと思います。

私はこのようなものが必要です:

List<float> orderedList;

IEnumerable<float> query = orderedList.Where(currentNum , nextNum => nextNum - currentNum < threshold);

それは可能ですか?はいの場合、どのように?

4

4 に答える 4

2

これを試してみてください:

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
         });
于 2012-10-24T17:17:51.247 に答える
1

代わりにこれを試してください:

var ls1 = ls.Where((item, index) => 
                   item - ls[ls.Count == index + 1 ? index : index + 1] >= 0);

これが役立つことを願っています!!

于 2012-10-24T17:19:31.280 に答える
1

これを試して -

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();
于 2012-10-24T17:20:31.587 に答える
1

これはうまくいくようです。(ただし、質問には誤解される可能性のある意味がいくつかあります。)

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.

于 2012-10-24T18:47:38.993 に答える