我无法弄清楚如何在第一个初始循环完成后循环遍历字符串数组。
我现在的代码是:
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]);
}
然而,似乎调整数组大小并没有太大成效,因为第6个值之后的数组值是不存在的。 我需要它继续循环一次: 一个 乙 C d Ë F A 乙 C d Ë 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]);
}
答案 1 :(得分: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.
答案 2 :(得分: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);
您可以使用foreach
- 循环Console.WriteLine
或构建字符串:
string result1 = string.Concat(allAssignments);
string result2 = string.Join(Environment.NewLine, allAssignments)
答案 3 :(得分:0)
如何使用mod
string[] assignments = new string[] { "A", "B", "C", "D", "E", "F" };
for (int i = 0; i < 99; i++)
{
Console.WriteLine(assignments[i%6]);
}