一尘不染

在C#中,如何建立从A到ZZ的数组,类似于excel对列进行排序的方式

algorithm

我期待的代码,其中所述第一项是可以产生一个阵列 ,然后 ,然后 Ç 。。在 Z之后 ,它将转到 AA
,然后是 AB, 然后是 AC 。。。一直到 ZZ

用C#做到这一点的最佳方法是什么?


阅读 696

收藏
2020-07-28

共1个答案

一尘不染

方法之一是:

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使用更复杂的代码来产生“无限”序列(以最大值为界):

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);
2020-07-28