簡體   English   中英

For Loop用List <> Enumerable.Range()產生額外的1。

[英]For Loop produces extra 1 with List<> Enumerable.Range()

我有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但產生一個空的Letter。

http://rextester.com/CEQN38224

1
V2
N3
Y4
V5

您永遠不會設置indexLetter[0] ,所以它留在'\\0' ,最終成為結果的初始字符。 通過跳過indexLetter的第一項來解決此indexLetter

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

請注意,您可以將整個操作折疊為單個LINQ表達式:

public static List<string> indexLetter = Enumerable.Range(1, 50)
    .Select(i => string.Format("{0}{1}", RandomLetter(), i))
    .ToList();

更改生成列表的方式:

// 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];
}

小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM