使用foreach创建包含2列的列表

时间:2012-01-18 22:38:33

标签: c#

我有一个最初只有1行的列表:

    One
    Two
    Three
    Four
    Five 
    Six
    Seven

然后我会在列表中有以下内容 - 请注意我有2列 - 第一列是奇数,第二列是偶数:

    One     Two
    Three   Four
    Five    Six
    Seven

我正在尝试以下方法:

foreach(var item in mod)
{
    int i = 0;

    i = i + 1;
    if (i % 2 == 0) 
    {                  
        //add to list here for even number 
    }

    if (i % 2 != 0)
    {
        // add to list here for odd number
    } 
}  

9 个答案:

答案 0 :(得分:2)

我建议LINQ:

var odds = mod.Where((item, index) => index % 2 == 0).ToList();
var evens = mod.Where((item, index) => index % 2 == 1).ToList(); 

答案 1 :(得分:2)

您每次都要重新声明i。将声明移到foreach之外。

List<int> even = new List<int>();
List<int> odd = new List<int>();

int i = 0;
foreach (var item in mod)
{
    i = i + 1;
    if (i % 2 == 0)
    {
        even.Add(i);
    }
    else
    {
        odd.Add(i);
    }
}

答案 2 :(得分:2)

以前的回答出错了:

static void Main(string[] args)
    {
        var mod = new string[] { "One", "Two", "Three", "Four", "Five", "Six", "Seven" };

        var OddNumbers = new List<string>();
        var EvenNumbers = new List<string>();
        int i = 0;
        foreach (var item in mod)
        {

            i = i + 1;
            if (i % 2 == 0)
            {
                EvenNumbers.Add(item);
            }
            else
            {
                OddNumbers.Add(item);
            }
        }
}

        // but when you use an index in your loop I find it more readable to use this
        for (var j = 0; j < mod.Length; ++j)
        {
            if (j % 2 == 0)
                 OddNumbers.Add(mod[j]);
            else
                EvenNumbers.Add(mod[j]);
        }

答案 3 :(得分:1)

怎么样:

int i = 0;
foreach(var item in mod)  //I assume 'mod' is a collection of ints?
{             
    if (i % 2 == 0)
    {
        //Do something with 'item'.
    }
    else 
    {
        //Do something else with 'item'.
    }

    i++;
}

答案 4 :(得分:1)

根据你的上一个问题,我猜你想要这样做:

int i = 0; 
foreach(var item in mod) 
{ 
     ..
     // rest of foreach loop here
}

答案 5 :(得分:1)

您可以根据类型创建两个列表并存储数字:

List<int> OddNumbers = new List<int>();
List<int> EvenNumbers = new List<int>();

然后执行以下操作:

         foreach(var item in mod) 
         { 
             if (item % 2 == 0)  
             {                   
                EvenNumbers.Add(item);
             } 
             else 
             {
                OddNumbers.Add(item);
             }
         } 

答案 6 :(得分:1)

这是你的algoryth的更正版本,它修复了你总是要比较i = 1的值的事实,因为你的int i声明在循环中

    int i = 0; 
     foreach(var item in mod)
     {
         i++;
         if (i % 2 == 0) 
         {                  
            //add to list here for even number 
         }
         else
         {
          // add to list here for odd number
         } 
     }  

答案 7 :(得分:1)

简单的bool就足够了。

var odds = new List<string>();
var evens = new List<string>();

bool odd = true;
foreach (var item in new[] {"one", "two", "three", "four"})
{
    if (odd)
        odds.Add(item);
    else
        evens.Add(item);

    odd = !odd;
}

答案 8 :(得分:1)

如果你想要一个包含两列的列表,你可以使用这样的元组。

            List<Tuple<List<int>, List<int>>> listTest = new List<Tuple<List<int>, List<int>>>();

            List<int> evenNumber = new List<int>();
            List<int> oddNumber = new List<int>();

            int i = 0;

            foreach (var item in mod)
            {

                if (i % 2 == 0)
                {
                   //add to list here for even number 
                    evenNumber.Add(i);                      
                }

                if (i % 2 != 0)
                {
                    // add to list here for odd number
                    oddNumber.Add(i);  
                }

                i++;
            }
            listTest.Add(Tuple.Create(oddNumber, evenNumber));