我需要创建一个List<string>
,长度为strings
的{{1}};像这样的结果:
50
我的代码是
...0000000000
...0000000001
...000000000z
...0000000010
...000000001z
...00000000zz
...0000000100
...00000001zz
...zzzzzzzzzz
在这种情况下,我可以使用ConcurrentBag<string> bags = new ConcurrentBag<string>();
string schar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
for (int a1 = 0; a1 < schar.length; a1++)
{
...
// 48 nested for loops here
...
for (int a50 = 0 ; a50 < schar.length ; a50++)
{
bags.add($"{schar[a1]}{schar[a2]}{schar[a3]}......to a50");
}
}
嵌套循环创建此列表,但是代码非常不可读。有什么方法可以创建这个吗?谢谢。
答案 0 :(得分:1)
您可以实现一个简单的 generator :
private static IEnumerable<string> MyGenerator(
int length,
string alphabeth = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") {
char[] item = Enumerable
.Repeat(alphabeth[0], length)
.ToArray();
do {
yield return new string(item);
for (int i = item.Length - 1; i >= 0; --i) {
int index = alphabeth.IndexOf(item[i]);
if (index < alphabeth.Length - 1) {
item[i] = alphabeth[index + 1];
break;
}
item[i] = alphabeth[0];
}
}
while (!item.All(c => c == alphabeth[0]));
}
演示:
var result = MyGenerator(3)
.Take(100);
string report = string.Join(Environment.NewLine, result);
Console.Write(report);
结果:
000
001
002
003
004
005
006
007
008
009
00A
00B
00C
00D
00E
00F
...
01Z
01a
01b
在您的情况下,可能是这样的:
var list = MyGenerator(50) // 50 characters in each item
.Take(1000) // take 1000 top items
.ToList(); // materialize as a list
请注意Take
:整个列表(如果不是受限制的)将是
62**50 == 4.16e89
项目,数量巨大。