以下是进行 alpha 排序的方法('a-z'、'aa-zz' 等):
public static void GenerateFileNames(int totalFiles)
{
for (int i = 0; i < totalFiles; i++)
{
Console.WriteLine(GetString(i));
}
}
public static string GetString(int index)
{
if (index < 26)
{
return ((char)('A' + index)).ToString();
}
return GetString(index / 26 - 1) + GetString(index % 26);
}
只需使用文件总数调用GenerateFileNames(),GetString() 函数将返回以A 开头并按字母顺序从最后一个文件名向上的文件名。
此答案取自linked question,可以完美地满足您的要求。接受的答案还包含另一种实现相同目的的方法。
如果您想在文件名中使用更多字母(例如“AAAA”),可以使用以下方法获取索引:
public static int GetStartIndex(string letters)
{
int index = 0;
for (int i = letters.Length - 1; i > 0; i--)
{
index += (int)Math.Pow(26, i);
}
return index;
}
GenerateFileNames() 过载:
public static void GenerateFileNames(int totalFiles, int startIndex)
{
for (int i = startIndex; i < totalFiles + startIndex; i++)
{
Console.WriteLine(GetString(i));
}
}
您可以调用GenerateFileNames(100, GetStartIndex("AAAA")); 写入100 个alpha 排序的文件,以AAAA 开头。
编辑:
我应该注意,对于比AAAA 长得多的字符串,您可能希望使用long 而不是int,因为指数。数字增长很快!这种方法应该适用于长度不超过 7 个字母的文件,并且在转换为 long 时会更高。
编辑 2:
要按字母顺序对这些文件进行排序,您可以简单地在 List 上使用 .Sort() 方法:
public static List<string> GenerateSortedFileNames(int totalFiles)
{
List<string> names = new List<string>();
for (int i = 0; i < totalFiles; i++)
{
names.Add(GetString(i));
}
names.Sort();
return names;
}
然后像这样使用它:
List<string> SortedNames = GenerateSortedFileNames(100);
foreach (string fileName in SortedNames)
{
Console.WriteLine(fileName);
}
//Outputs A,AA,AB,AC ... X,Y,Z