我的文件编号系统刚刚超过100,000,这导致了一些问题。也就是说它导致程序在#99,999之前组织#100,000,因为它首先看到1。
例如,另一个程序会按升序读取文件:
XXXX_100000_XXXXXX.file
XXXX_10001_XXXXXX.file
XXXX_99999_XXXXXX.file
但它应该去:
XXXX_10001_XXXXXX.file
XXXX_99999_XXXXXX.file
XXXX_100000_XXXXXX.file
我有一个函数可以读取所有文件,按编号对它们进行排序,然后按顺序将它们放入一个新的数组中。这里有一些伪代码:
while(my directory has more files)
//this entire chunk assigns the number part of the filename to an int
string filename = my file
string num = filename[5] through filename[11]
//checks if the number is 5 digits, if yes, removes the underscore
if(num at position [11] == "_"){
num = num[5] through num[10]
}
int fileNum = num.toInteger
//now I have the number as an int
修改:
我刚刚意识到,通过在文件名上调用.Split
并将arr[1]
转换为int
,我可以更轻松地获取该号码。我会留下旧代码以获得乐趣。
在这里,我被困住了。我希望将这些数据提供给一个新的数组,排序,或者在所有内容都存在之后使数组可以排序。
我是否需要创建一个文件名和数字作为元素的对象,将所有对象输入,然后按数字对数组进行排序?我知道这会有用,但我无法帮助,但我认为这是一种更有效的方法。
我不需要为我编写代码,我只需要帮助编制算法逻辑,或者如果我的方式已经是最好的方式,请告诉我!
答案 0 :(得分:1)
如果您有未排序的文件名数组,例如
string[] fileNames = ...
和从名称中提取数字的功能,例如
public static int GetFileNumber(string myfile) {
string num = filename[5] through filename[11]
//checks if the number is 5 digits, if yes, removes the underscore
if(num at position [11] == "_"){
num = num[5] through num[10]
}
return num.toInteger
}
然后您可以使用Array.Sort
对其进行排序:
Array.Sort(fileNames, (f1, f2) => GetFileNumber(f1).CompareTo(GetFileNumber(f2)));
答案 1 :(得分:0)
你可以尝试使用int数组作为文件名的数字和字符串数组,然后将其推送到集合,最后对集合进行排序吗?
使用创建集合 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/collections
然后用它对集合进行排序 https://sankarsan.wordpress.com/2011/05/07/sorting-collections-in-c/
很抱歉,如果我的帮助不大。
答案 2 :(得分:0)
您可以使用"字母数字排序"对字符串列表进行排序。这将使" 100"在" 9"。
之后