我如何在c#中多次循环字符串数组?

时间:2017-10-30 13:58:25

标签: c# .net arrays loops array-population

我无法弄清楚如何在第一个初始循环完成后循环遍历字符串数组。

我现在的代码是:

    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的限制。

4 个答案:

答案 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

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