For Loop使用List<>生成额外的1 Enumerable.Range()

时间:2017-12-12 03:37:47

标签: c# list loops for-loop

我有2个列表,letterindexLetter,每个列表包含50个变量,从1开始,而不是0

我需要将两个列表作为单独的集合。

我生成一个随机字母并将其添加到letter列表中:

W
G
I
Y
H
...

然后将其与索引号组合并将其添加到indexLetter列表:

W1
G2
I3
Y4
H5
...

但是我的代码在开头输出了额外的1

1
W1
G2
I3
Y4
H5
...

C#

http://rextester.com/SINT13872

// Letter List
public static List<char> letter = Enumerable.Range(1, 51)
                                            .Select(i => '\0') // null char
                                            .ToList();
// Index Number List
public static List<string> indexLetter = Enumerable.Range(1, 51)
                                            .Select(i => i.ToString()) // number
                                            .ToList();
// Generate Random Letter
public static Random random = new Random();
public static char RandomLetter()
{
    const string text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int index = random.Next(text.Length);
    return text[index];
}


public static void Main(string[] args)
{

    // Combine Random Letter with Index Number
    for (var i = 1; i < 51; i++)
    {
        // Letter
        letter[i] = RandomLetter();

        // Letter + Index Number
        indexLetter[i] = letter[i] + i.ToString();
    }

   // Display Letter + Index Letter List
   Console.WriteLine(string.Join("\n", indexLetter));
}

删除额外1但产生空字母的另一个示例。

http://rextester.com/CEQN38224

1
V2
N3
Y4
V5

2 个答案:

答案 0 :(得分:2)

您永远不会设置mysql,因此它会保留在indexLetter[0],最终成为结果的初始字符。通过跳过'\0'的第一项来解决此问题:

indexLetter

请注意,您可以将整个操作折叠为单个LINQ表达式:

Console.WriteLine(string.Join("\n", indexLetter.Skip(1)));

答案 1 :(得分:2)

更改列表的生成方式:

// Letter List
public static List<char> letter = Enumerable.Range(1, 50)
                                        .Select(i => '\0') // null char
                                        .ToList();
// Index Number List
public static List<string> indexLetter = Enumerable.Range(1, 50)
                                        .Select(i => i.ToString()) // number
                                        .ToList();

这将产生两个列表,其中包含来自1-50的50个项目。

接下来,改变你的for循环:

for (var i = 0; i < indexLetter.Count; i++)
{
    // Letter
    letter[i] = RandomLetter();

    // Letter + Index Number
    indexLetter[i] = letter[i] + indexLetter[i];
}

Fiddle