iOS:根据数组的顺序对文件夹中的文件进行排序

标签 ios objective-c path nsfilemanager nssortdescriptor

<分区>

我有一个包含文件 B、C、A 的文件夹。这是我执行以下操作时它们出现的顺序:

    NSFileManager *filemgr;
    NSArray *filelist;
    int count;
    int i;

    filemgr =[NSFileManager defaultManager];
    filelist = [filemgr contentsOfDirectoryAtPath:myPathHere error:NULL];
    count = [filelist count];

    for (i = 0; i < count; i++)
    {

       NSLog(@"File %@ is at index: %d", [filelist objectAtIndex: i], i);

    }

如何对文件进行排序,使它们与字符串数组(例如 A、B、C)的顺序相匹配?

我应该使用 sortUsingDescriptors 吗?

最佳答案

假设您的意思是按照字符列表的顺序(单个字符串),但这也可能更复杂:

  • 构造一个包含字符串(字符)的数组。如果你要有“Ca”和“C”,那么前者必须在前。

  • 用字符串创建一个字典,字符串是键,并使用一个代表它在数组中的顺序的 NSNumber 作为对象。

  • 创建一个单独的字典,给定一个前缀字母字符串,返回确保找到第一个字典中的每个键所需的最长可能匹配

现在,当您获得文件列表时:

  • 以文件名的第一个字符为key,获取在第一个搜索中使用的最大字符数。

  • 获取这些字符,并在第一个字典中查找匹配项。如果没有找到,则将字符串长度一一减少,直到找到匹配项。现在你知道这个文件名的顺序了。将其添加到新字典中,以文件名作为键,以表示其顺序的 NSNumber 作为对象。

  • 从这个新字典中获取所有值的数组,并根据 NSNumber 的值对其进行排序。您将需要丢弃重复项。

  • 重复获取具有指定值的字典对象。您可能希望根据其他一些条件进一步排序

因此,您可以决定文件名首先以元音开头,然后是其他字符。所以你的第一个数组是“A”、“E”、“I”、“O”、“U”、“Y”、“B”、...

关于iOS:根据数组的顺序对文件夹中的文件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16866371/

相关文章:

Haskell,堆栈 : locate the executable

python - 从路径中提取文件名,无论操作系统/路径格式如何

ios - RestKit:如何重试失败的请求?

ios - UISplitViewController 中的自定义 UIBarButtonItem 不响应点击 (iPhone)

ios - SKVideoNode 只在 SCNSphere 的一小部分

ios - 进入前台时出现 UIRefreshControl 错误

ios - 从图像中获取子图像

objective-c - 如何在 Swift 项目中强制执行 `Xcode-generated header` ...(从 Obj-C 调用 Swift)

python - 你如何在 python 2.7 中使用 "os.path.isfile ()"和一组 "path"但一个变量文件名?

iphone - "Unable to restore previously selected frame"遍历 NSDictionary 时