2012-01-18 15 views
4

を使用して2列Iのような、最初はわずか1行でリストを持っていると、リストを作成します。foreachの

One 
    Two 
    Three 
    Four 
    Five 
    Six 
    Seven 

私は、リストに次のように持っているだろう - 私は2列を持っているかに注意してください - 最初の列があります奇数のため、2番目の列には偶数のためです:

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 
    } 
} 
+3

あなたの質問は何ですか? – Brandon

+1

2番目のif文をelse文で置き換えることができます。 –

+1

あなたの質問は何ですか? – diggingforfire

答えて

2

私は、LINQをお勧めしたい:あなたは二つのリストを作成することができます

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

しかし、これは入力リストを2回通過するのではなく、1回です。この小さなデータセットにとって大きな問題ではありませんが、入力リストが大きければパフォーマンスに影響します。 – ChrisF

+0

これでコレクションを2回繰り返していませんか? –

+1

実際、サイズを保証するのに十分な大きさであることがわかるまで、私はコードのシンプルさをスピードよりも優先します。 – tzaman

1

方法について:私は次のことをしようとしています

One  Two 
    Three Four 
    Five Six 
    Seven 

:あなたの最後の質問に基づいて

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++; 
} 
1

、私はあなたがこれをしたい推測している:

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

をし、その種類に応じて番号を保存します。

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

は、次の操作を行います。あなたはiたびに再宣言している

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

コードサンプルですべての数字が奇妙になることは間違いありません。 –

2

。 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); 
    } 
} 
1

は、int型のあなたの宣言は、私のループで

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 
     } 
    } 
2

だったので、あなたはなかれI = 1の値を比較することがありますという事実を修正し、あなたのalgorythの修正版です答えにエラーがありました:

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]); 
     } 
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; 
} 
1

2つの列のリストが必要な場合は、このようなタプルを使用できます。

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