【问题标题】:Filtering elements of an array过滤数组的元素
【发布时间】:2014-01-05 04:16:05
【问题描述】:

我有一个数组

也就是说,每个项目在以下索引中都有其类别。 我需要类别为 TotalNumbers 和 CurrentNumbers 的所有项目。

我试过了

 int i = 1;
            foreach (string item in statsname)
            {
                 //only number type stats are added to the comboboxes.
                if ((statsname[i].ToUpperInvariant()==("TOTALNUMBER")) || ((statsname[i].ToUpperInvariant()==("CURRENTNUMBER"))))
                {
                    comboBox1.Items.Add(statsname[i-1]);
                    i++;
                    i++;
                }
                comboBox1.SelectedIndex = 0;
            }

显然这并不能正确检查我需要的内容。

我需要如何修改我的代码以获得我需要的东西?

【问题讨论】:

    标签: c# wpf arrays filtering


    【解决方案1】:
    var filteredValues = Array.FindAll(source, s => s.ToUpperInvariant() == "TOTALNUMBER" ||
                                                                s.ToUpperInvariant() == "CURRENTNUMBER").ToList()
    

    【讨论】:

      【解决方案2】:

      似乎最好使用 for 循环而不是 foreach:

      for (int i = 1; i < statsname.Length; i += 2)
      {
          //only number type stats are added to the comboboxes.
          if ((statsname[i].ToUpperInvariant()==("TOTALNUMBER")) || ((statsname[i].ToUpperInvariant()==("CURRENTNUMBER"))))
              comboBox1.Items.Add(statsname[i-1]);
      }
      

      【讨论】:

        【解决方案3】:

        我不确定您为什么在 foreach 循环中使用索引。下面的代码应该适合你

        foreach (string item in statsname)
                {
        
                    if ( item.ToUpper() == "TOTALNUMBER" || item.ToUpper() == "CURRENTNUMBER")
                    {
                        comboBox1.Items.Add(item);
        
                    }
        
                }
                comboBox1.SelectedIndex = 0;
        

        【讨论】:

          【解决方案4】:

          Linq 来救援!

          var listItems = from s in statsname where s.Equals("TOTALNUMBER", StringComparison.InvariantCultureIgnoreCase) || s.Equals("CURRENTNUMBER", StringComparison.InvariantCultureIgnoreCase) select new ListItem(s);
          
          comboBox1.AddRange(listItems);
          

          代码未经测试或编译,但您可以了解我所说的内容。

          【讨论】:

          • 我不需要添加 TotalNumber 和 CurrentNumber。我需要在数组中添加 ONE ABOVE IT。
          • @AnoushkaSeechurn 你应该在帖子中这么说。您的帖子另有建议:“我需要类别为 TotalNumbers 和 CurrentNumbers 的所有项目。”
          • @dcastro ,帖子还提到“每个项目在以下索引中都有其类别”。也就是说检查条件是TotalNumber和CurrentNumber,但是需要显示的是上面这些索引的项目。
          • @AnoushkaSeechurn 我现在明白了。你不觉得Dictionary&lt;string, string&gt; 更适合这个吗?
          • 拥有一个数组,其中奇数索引的项目与偶数索引的项目具有不同的含义,这是造成混乱的秘诀。
          猜你喜欢
          • 2017-01-04
          • 2017-11-26
          • 2016-09-19
          • 2012-09-17
          • 2016-09-04
          • 2019-05-29
          • 1970-01-01
          • 2018-03-14
          • 1970-01-01
          相关资源
          最近更新 更多