1

在 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文件随机命名)。

要访问该文件,最初的方法是:

// 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) 的方式来获取所需文件的路径,因为只有一个具有给定数字前缀的文件?

4

1 回答 1

2

为什么不建立名称字典,然后在该字典中查找路径?字典键是前缀,值是完整路径。

即:(伪代码)

// 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

然后,知道前缀,获取路径既简单又快速(当然,多快取决于使用的字典实现):dictionnary.get(prefix)


要构建文件的内容,只需应用相同的逻辑:在每次迭代时,记住前一个文件的内容/后缀并使用它,而不是从头开始重新计算。

于 2012-12-02T11:26:37.287 回答