枚举从 'a' 到 'zzz' 的字母表
enumerating over the alphabet from 'a' to 'zzz'
我想知道是否可以枚举从 'a' 到 'zzz' 的字母表?
例如,我有一个最多包含 1000 个洞穴的洞穴系统,我想为每个洞穴分配一个 char
值。
1 = a, 2 = b, 3 = c ... 27 = aa etc
如果可能的话,最好的方法是什么?
它就像 excel 列的转换器:
How to convert a column number (eg. 127) into an excel column (eg. 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;
}
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);
}
我想知道是否可以枚举从 'a' 到 'zzz' 的字母表?
例如,我有一个最多包含 1000 个洞穴的洞穴系统,我想为每个洞穴分配一个 char
值。
1 = a, 2 = b, 3 = c ... 27 = aa etc
如果可能的话,最好的方法是什么?
它就像 excel 列的转换器: How to convert a column number (eg. 127) into an excel column (eg. 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;
}
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);
}