从字符串列表创建列表

时间:2018-10-02 08:18:57

标签: c# list

我需要创建一个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"); } } 嵌套循环创建此列表,但是代码非常不可读。有什么方法可以创建这个吗?谢谢。

1 个答案:

答案 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

项目,数量巨大。