我期待的代码,其中所述第一项是可以产生一个阵列 甲 ,然后 乙 ,然后 Ç 。。在 Z之后 ,它将转到 AA ,然后是 AB, 然后是 AC 。。。一直到 ZZ 。
用C#做到这一点的最佳方法是什么?
方法之一是:
IEnumerable<string> generate() { for (char c = 'A'; c <= 'Z'; c++) yield return new string(c, 1); for (char c = 'A'; c <= 'Z'; c++) for (char d = 'A'; d <= 'Z'; d++) yield return new string(new[] { c, d }); }
编辑: 实际上,您可以long使用更复杂的代码来产生“无限”序列(以最大值为界):
long
string toBase26(long i) { if (i == 0) return ""; i--; return toBase26(i / 26) + (char)('A' + i % 26); } IEnumerable<string> generate() { long n = 0; while (true) yield return toBase26(++n); }
这是这样的:A,B,…,Z,AA,AB,…,ZZ,AAA,AAB等…:
foreach (var s in generate().Take(200)) Console.WriteLine(s);