删除List <double> C#中的Infinity值

时间:2016-07-27 10:55:28

标签: c#

我的名字为listDouble的名单,任何有价值的项目都是Infitity。

我想将其从listDouble删除。

试过:

listDouble.RemoveAll(item => item.Equals(0.0) && item.Equals("Infinity"));

我还在将result添加到列表&lt;&gt;之前进行检查代码:

double result;
if (result == Double.NegativeInfinity)
    result = 0;
else
    return result;

但无法移除List<Double> listDouble中的值=无穷大。

7 个答案:

答案 0 :(得分:6)

我认为这是一个更优雅的解决方案,只需使用double.IsInfinity()

List<double> doubleTest = new List<double>()
{
    0,
    12233302.4,
    double.NegativeInfinity,
    double.PositiveInfinity,
    5
};

doubleTest.RemoveAll(item => double.IsInfinity(item) || item == 0);

在评论后更新,说明他还想删除值0

答案 1 :(得分:2)

删除无限值:

require(data.table)

dt = data.table(x = sapply(input, '[', 1),
                y = sapply(input, '[', 2),
                z = sapply(input, '[', 3))

dt2 = dt[, {
  l1 = list()
  l1[[x]][[y]] = as.list(z)
  list(l1)
}, by = list(x, y)]

dt3 = dt2[, list({
  l2 = list()
  l2[[x]] = unlist(V1, recursive = FALSE)
  l2
}), by = x]

out = dt3[['V1']]
names(out) = dt3[['x']]

out

listDouble = listDouble.Where(x => !Double.IsInfinity(x)).ToList(); 替换无限值:

0

答案 2 :(得分:1)

您需要使用IsNegativeInfinityIsPositiveInfinityIsInfinity方法代替Double.NegativeInfinityDouble.PositiveInfinity进行比较。

List<Double> doubles = new List<Double> { Double.NegativeInfinity, Double.PositiveInfinity, 1.1, 2.0 };
var newList = doubles.RemoveAll(Double.IsInfinity);

答案 3 :(得分:1)

我怀疑等于无穷大的值也等于0。试试这个。

listDouble.RemoveAll(item => item.IsPositiveInfinity());

或者,如果您尝试删除零值和无限值,则必须将&&更改为||

答案 4 :(得分:1)

我想这就是你的样子:

enter image description here

只需查看Double.IsInfinity(),就像这样:

doubles.RemoveAll(doub => Double.IsInfinity(doub));

答案 5 :(得分:0)

您只需检查负无穷大,您需要添加正无穷大检查

listDouble.RemoveAll(x => x == double.PositiveInfinity || x == double.NegativeInfinity);

或只是:

listDouble.RemoveAll(x => double.IsInfinity(x));

答案 6 :(得分:0)

您需要改为代替double.PositiveInfinitydouble.NegativeInfinity常量:

list.RemoveAll(i => i == double.PositiveInfinity || i == double.NegativeInfinity);