[英]For Loop produces extra 1 with List<> Enumerable.Range()
我有2個列表, letter
和indexLetter
,每個都有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.