2017-10-30 1 views
0

最初の初期ループが完了した後に文字列配列をループする方法を理解できません。今私はどのようにループの文字列配列をC#で複数回ですか?

私のコードは次のとおりです。

string[] assignments = new string[] {"A", "B", "C", "D", "E", "F"}; 

    Array.Resize<string>(ref assignments, 99); 
    for (int i = 0; i < 99; i++) 
    { 
    Console.WriteLine(assignments[i]); 
    } 

しかし、第六値が非existantされた後、配列のサイズを変更すると配列の値があるため、あまりを達成しないようです。 は、私は、もう一度ループ保つためにそれを必要とする: B C D E F A B C D E F ...というように、99の上限に達するまで。

+0

を、あなたの配列は、それらの繰り返しの項目を含むようにしたいですか? –

答えて

6

mod operatorを使用してください。

string[] assignments = new string[] {"A", "B", "C", "D", "E", "F"}; 
for (int i = 0; i < 99; i++) 
{ 
    Console.WriteLine(assignments[i % assignments.Length]); 
} 

.net fiddle

+0

hah!そのように簡単です。ありがとうございました! –

+5

'%%assignments.Length' - いいえ*魔法の数字*、please –

+0

@DmitryBychenko - 十分に公正です。更新しました。 – Igor

2

あなたはmodulus演算子を使用することができる「は、その第二することによって、その最初のオペランドを除算した余りを計算します。」

void Main() 
{ 
    string[] assignments = new string[] {"A", "B", "C", "D", "E", "F"}; 

    for (int i = 0; i < 99; i++) 
    { 
     var j = i % 6; 
     Console.WriteLine(assignments[j]); 
    } 
} 

0 % 6 = 0 
1 % 6 = 1 
... 
6 % 6 = 0 
7 % 6 = 1 
... etc. 
0

はどのようにモッズ

string[] assignments = new string[] { "A", "B", "C", "D", "E", "F" }; 

     for (int i = 0; i < 99; i++) 
     { 
      Console.WriteLine(assignments[i%6]); 
     } 
2

義務LINQのソリューションを使用してについては、この拡張機能は便利になる:

は今、あなたの仕事は非常に簡単で読みやすいです
public static IEnumerable<T> RepeatIndefinitely<T>(this IEnumerable<T> source) 
{ 
    while (true) 
    { 
     foreach (var item in source) 
     { 
      yield return item; 
     } 
    } 
} 

var allAssignments = assignments.RepeatIndefinitely().Take(99); 

と-loopまたは文字列の構築:

string result1 = string.Concat(allAssignments); 
string result2 = string.Join(Environment.NewLine, allAssignments) 
+0

私はこれに非常に似ています。しかし、それが評価されたときに無期限に繰り返す呼び出しがクラッシュする危険性があると考えられますか? – Dave

+0

@Dave:もちろん、それはちょっと危険です。フィルタなしで 'ToList'を追加すると(f.e' Where'または 'Take')、あなたは' OutOfMemoryException'を取得します。しかし、名前がかなり明確なので、あなたが の無限の数のアイテムを取ろうとすると、何が起こるかを知るべきです;-) –

関連する問題