1

假设我有一个浮动的有序列表(升序)。

我想从中删除下一个元素与自身之间的差异小于给定阈值的每个元素。

我需要这样的东西:

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 回答