Objective c 在iOS中的O(1)时间内查找具有唯一前缀的文件
在iPad应用程序中,我有一个包含以下文件的文件夹:Objective c 在iOS中的O(1)时间内查找具有唯一前缀的文件,objective-c,ios,file-handling,Objective C,Ios,File Handling,在iPad应用程序中,我有一个包含以下文件的文件夹: 1-1-xxxx.dat 1-2-xxxx.dat ... 1-999-xxxx.dat 2-1-xxxx.dat ... ... 999-999-xxxx.dat 其中,xxxx部分是创建文件时在运行时确定的字符。每个文件的内容取决于上一个文件的内容,因此对于我创建的每个文件,我需要查询上一个文件。问题是,我只知道上一个文件的前缀,而不知道xxxx部分,因为“xxxx”部分基本上是随机的。(xxxx部分本身由上一个文件的xxxx部分确定,
1-1-xxxx.dat
1-2-xxxx.dat
...
1-999-xxxx.dat
2-1-xxxx.dat
...
...
999-999-xxxx.dat
其中,xxxx
部分是创建文件时在运行时确定的字符。每个文件的内容取决于上一个文件的内容,因此对于我创建的每个文件,我需要查询上一个文件。问题是,我只知道上一个文件的前缀,而不知道xxxx
部分,因为“xxxx”部分基本上是随机的。(xxxx
部分本身由上一个文件的xxxx
部分确定,其中1-1-xxxx
文件被随机命名)
要访问该文件,最初的方法是:
// For file 1-50-xxxx.dat
NSError *error = nil;
NSFileManager *fm = [NSFileManager defaultManager];
NSArray *allFiles = [fm contentsOfDirectoryAtPath:path error:&error];
for (NSString *file in allFiles) {
if ([file hasPrefix:@"1-49-"]) {
// Determine contents and name of file "1-50-xxxx.dat"
// Create file, break, etc.
}
}
// ... And repeat for many files
这显然会很快变得非常昂贵。有没有一种O(1)方法可以获取所需文件的路径,因为只有一个文件具有给定的数字前缀?为什么不建立一个名称字典,然后在该字典中查找路径?单词键是前缀,值是完整路径 i、 e.:(伪代码) 然后,知道一个前缀后,获取路径既简单又快速(速度的快慢当然取决于使用的dictionnary实现):dictionnary.get(prefix)
要构建文件的内容,只需应用相同的逻辑:在每次迭代中,记住上一个文件的内容/后缀,并使用它,而不是从一开始就再次计算它
// Build the path dictionnary, that is done only once
currentPrefix = ...
previousXXX = null
foreach file
currentXXX = computeXXX( previousXXX )
dictionnary.put( currentPrefix, computePath( currentPrefix, currentXXX )
// Remember for next iteration
previousXXX = currentXXX
currentPrefix++
endforeach