Sto cercando di creare una funzione che mi fornirà la posizione dell'alfabeto quando viene passato un indice. Sarà uguale al modo in cui Excel mostra le sue colonne. A ... Z, AA, AB .... ho scritto la funzione qui sotto per ottenere i risultati FINO Z. assomigliaAlfabeti di incremento
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;
}
Questo funziona bene fino a quando 'Z'. Restituisce "A" se passo 1 e restituisco "B" se passo 2 e così via. Ma, non sono in grado di capire come otterrò AA quando passo 27 a questa funzione. Credo di aver bisogno di un metodo ricorsivo per trovarlo.
Qualsiasi input per questo problema sarà fantastico!
Modifica
Ciò è suggerito da Tordek. Ma il suo codice fallirà in numeri come 52, 78 ecc. Aggiunta soluzione alternativa per questo ed ecco il codice di lavoro finale.
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);
}
}
Grande.La mia matematica è arrugginita. Quindi non riuscivo a capire il funzionamento del modulo. Grazie per il codice. –