过滤数组的元素

时间:2013-12-17 11:58:04

标签: c# wpf arrays filtering

我有一个数组

enter image description here

也就是说,每个项目在以下索引中都有其类别。 我需要所有类别为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;
            }

显然,这并没有检查我的需要。

如何修改我的代码以获得我需要的内容?

4 个答案:

答案 0 :(得分:2)

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);

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

答案 1 :(得分: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]);
}

答案 2 :(得分:1)

var filteredValues = Array.FindAll(source, s => s.ToUpperInvariant() == "TOTALNUMBER" ||
                                                            s.ToUpperInvariant() == "CURRENTNUMBER").ToList()

答案 3 :(得分:0)

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

foreach (string item in statsname)
        {

            if ( item.ToUpper() == "TOTALNUMBER" || item.ToUpper() == "CURRENTNUMBER")
            {
                comboBox1.Items.Add(item);

            }

        }
        comboBox1.SelectedIndex = 0;