首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lists<>在环

Lists<>在环
EN

Stack Overflow用户
提问于 2012-06-12 14:59:40
回答 4查看 255关注 0票数 0

我在循环中使用list有问题,我很感谢你们中的任何人能帮我。我希望创建一个列表,并使用大于-999的值从数组(在我的代码:sarray中命名)填充它。但问题是,当值小于-999时,代码转储列表的前一项,大小不是40,而是27 (好像创建了新的列表)!

代码语言:javascript
复制
  List<double> nums = new List<double>();
        for (int i = 0; i < 50; i++)
        {
            if (sarray[i] > -999)
            {
                nums.Add(sarray[i]);

            }
        }

这些都是价值:

31411.0857 31411.0902 31411.0847 31411.0858 31411.0859 31411.0649 31411.0895 31411.0944 31411.0207 31411.0683 31411.0717 31411.0825 -999 -999 -999 -999 -999 -999 -999 -999 -999 -999 -999-999 31411.0156 31411.0718 31411.0719 31411.0884 31411.0885 31411.0896 31411.0897 31411.0537 31411.066 31411.0631411.0631411.0701 31411.0701 31411.0731 31411.0752 31411.0716 31411.0776 31411.0803 31411.091 31411.1411.0911 31411.0919 31411.0919 31411.0919

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-12 15:02:44

泛型列表在其过载构造器中接受一个可枚举的枚举,您可以使用Linq Where扩展方法来约束要添加的项:

代码语言:javascript
复制
var nums = new List<double>(sarray.Where(d => d > -999));

您可以声明-999为您表示一个"null“值,在这种情况下,您可以将Where更改为不假定有效值大于-999:

代码语言:javascript
复制
var nums = new List<double>(sarray.Where(d => d != -999));

我相信这种风格表达的意图比你自己的循环更清晰。

顺便说一下,double.NaN可能是无效值的更明显的表示形式。

但问题是当值小于-999时。

这是因为您只检查值大于-999:if (sarray[i] > -999)的位置。

但是,您提供的值转储没有任何小于-999的项,因此只要数据集保持不变,此检查就足够了。

票数 4
EN

Stack Overflow用户

发布于 2012-06-12 15:07:14

您所描述的代码不会发生在您演示的代码中。它将将数组中所有大于-999的值从索引0添加到索引49。

如果数组大于50个项,则不会使用数组中的所有项。应该使用循环中数组的长度来获取所有项:

代码语言:javascript
复制
for (int i = 0; i < sarray.Length; i++)

(即使您知道数组总是50个项,仍然使用Length属性是个好主意。这样,即使将来更改数组的长度,数组也将始终使用整个数组。)

编辑:

我用您的数据测试了您的代码,列表中最后有40项。

代码语言:javascript
复制
double[] sarray = {
  31411.0857, 31411.0902, 31411.0847, 31411.0858, 31411.0859, 31411.0479,
  31411.0649, 31411.0895, 31411.0944, 31411.0207, 31411.0683, 31411.0717,
  31411.075, 31411.0825, -999, -999, -999, -999, -999, -999, -999, -999,
  -999, -999, 31411.0156, 31411.0718, 31411.0719, 31411.0884, 31411.0885,
  31411.0936, 31411.0896, 31411.0897, 31411.0537, 31411.066, 31411.0661,
  31411.0556, 31411.0701, 31411.0731, 31411.0952, 31411.0716, 31411.0776,
  31411.0803, 31411.091, 31411.0911, 31411.0919, 31411.0919, 31411.0919,
  31411.0919, 31411.0919, 31411.0919
};

List<double> nums = new List<double>();
for (int i = 0; i < 50; i++) {
  if (sarray[i] > -999) {
    nums.Add(sarray[i]);
  }
}

Console.WriteLine(nums.Count);

输出:

代码语言:javascript
复制
40
票数 6
EN

Stack Overflow用户

发布于 2012-06-12 15:04:42

用这个:

代码语言:javascript
复制
List<double> nums = new List<double>(sarray.Where(x => x > -999));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10999315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档