Я пытаюсь создать функцию, которая даст мне позицию в алфавите при передаче индекса. Это будет похоже на то, как Excel показывает столбцы. A ... Z, AA, AB .... Я написал функцию ниже, чтобы получить результаты до Z. Похоже,
static string GetColumnName(int index)
{
const int alphabetsCount = 26;
if (index <= alphabetsCount)
{
int code = (index - 1) + (int)'A';
return char.ConvertFromUtf32(code);
}
return string.Empty;
}
Это нормально работает до "Z". Он возвращает «A», если я передаю 1, и возвращаю «B», если я прохожу 2, и так далее. Но я не могу понять, как я получу AA, если передам 27 этой функции. Думаю, мне нужен рекурсивный метод, чтобы найти его.
Любой вклад в эту проблему будет отличным!
Изменить
Это предполагает Тордек. Но его код не работает с числами вроде 52, 78 и т. Д. Добавлен обходной путь для этого, и вот окончательный рабочий код.
static string GetColumnName(int index)
{
const int alphabetsCount = 26;
if (index > alphabetsCount)
{
int mod = index % alphabetsCount;
int columnIndex = index / alphabetsCount;
// if mod is 0 (clearly divisible) we reached end of one combination. Something like AZ
if (mod == 0)
{
// reducing column index as index / alphabetsCount will give the next value and we will miss one column.
columnIndex -= 1;
// passing 0 to the function will return character '@' which is invalid
// mod should be the alphabets count. So it takes the last char in the alphabet.
mod = alphabetsCount;
}
return GetColumnName(columnIndex) + GetColumnName(mod);
}
else
{
int code = (index - 1) + (int)'A';
return char.ConvertFromUtf32(code);
}
}