0

在第一个初始循环完成后,我不太清楚如何循环字符串数组。

我现在的代码是:

    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 个值之后的数组值不存在。我需要它继续循环不止一次: A B C D E FA B C D E F ... 等等,直到达到 99 的限制。

4

4 回答 4

6

使用mod 运算符

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

.net 小提琴

于 2017-10-30T14:01:04.987 回答
2

您可以使用运算符“在将其第一个操作数除以第二个操作数后计算余数”。

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.
于 2017-10-30T14:01:38.090 回答
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-loopConsole.WriteLine或构建字符串:

string result1 = string.Concat(allAssignments);
string result2 = string.Join(Environment.NewLine, allAssignments)
于 2017-10-30T14:10:45.233 回答
0

怎么用mod

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

        for (int i = 0; i < 99; i++)
        {
            Console.WriteLine(assignments[i%6]);
        }
于 2017-10-30T14:05:49.557 回答