перечисление по алфавиту от «а» до «zzz» - PullRequest
0 голосов
/ 26 ноября 2018

Мне интересно, можно ли перечислить по алфавиту от «а» до «zzz»?

Например, у меня есть система пещер, которая содержит максимум 1000 пещер, и я хотел бы назначить значение char для каждой из них.

1 = a, 2 = b, 3 = c ... 27 = aa и т. Д.

Как лучше всего это сделать, если этовозможно

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018
void Main()
{
    foreach (string word in EnumerateCaveNames())
        Console.WriteLine(word);
}

IEnumerable<string> EnumerateCaveNames()
{
    for (int i = 0; i < 26 * 26 * 26; ++i)
    {
        yield return BuildCaveName(i);
    }
}

string BuildCaveName(int caveNum)
{
    string name = (GetLetterFromNumber(caveNum / (26 * 26)) + GetLetterFromNumber((caveNum / 26) % 26) + GetLetterFromNumber(caveNum % 26)).TrimStart('a');
    if (name == "")
        name = "a";
    return name;
}

string GetLetterFromNumber(int num)
{
    return "" + (char)('a' + num);
}
0 голосов
/ 26 ноября 2018

Это как конвертер для столбцов Excel: Как преобразовать номер столбца (например, 127) в столбец Excel (например, AA)

private string GetExcelColumnName(int columnNumber)
{
    int dividend = columnNumber;
    string columnName = String.Empty;
    int modulo;

    while (dividend > 0)
    {
        modulo = (dividend - 1) % 26;
        columnName = Convert.ToChar(65 + modulo).ToString() + columnName;
        dividend = (int)((dividend - modulo) / 26);
    } 

    return columnName;
}
...