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

iOS:根据数组的顺序对文件夹中的文件进行排序,ios,objective-c,path,nsfilemanager,nssortdescriptor,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 = [fil

我有一个包含文件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);

    }
NSFileManager*filemgr;
NSArray*文件列表;
整数计数;
int i;
filemgr=[NSFileManager defaultManager];
filelist=[filemgr contentsOfDirectoryAtPath:myPathHere错误:NULL];
计数=[文件列表计数];
对于(i=0;i
如何对文件进行排序,使其与字符串数组(例如A、B、C)的顺序相匹配


我是否应该使用
排序描述符

试一试-作为NSURL遍历路径,并使用
NSURLLocalizedNameKey
属性:

NSFileManager *manager = [NSFileManager defaultManager];
NSArray *fileList = [manager contentsOfDirectoryAtURL:[NSURL fileURLWithPath:oneDir.path]
                        includingPropertiesForKeys:[NSArray arrayWithObject: NSURLFileResourceIdentifierKey]
                                           options:nil
                                             error:nil];

for (NSURL *f in fileList) {
    NSString *name = nil;
    if ([f getResourceValue:&name forKey:NSURLLocalizedNameKey error:nil]) {
        NSLog(@"%@",name);
    }
}

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

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

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

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

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

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

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

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

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


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

这应该是字符串数组,所以请对字符串进行排序

NSArray * sortedStrings = [filelist sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

您真的需要对该文件夹中的文件进行排序,还是对文件列表数组进行排序就足够了?我需要对它们进行排序@HermannKlecker。我问了“A或B”,您的回答是“是”。这很公平!A-我需要对该文件中的文件进行排序folder@Stavesh. 谢谢你的建议。我尝试用
[NSURL fileURLWithPath:oneDir.path]
替换
[[NSBundle mainBundle]resourceURL]
,其中我的文件夹路径是oneDir.path,
NSURLLocalizedNameKey
,但它没有做任何事情。有什么想法吗?没有做任何事==完全相同的顺序?这是行的正确代码:
NSArray*fileList=[manager contentsofdirectorynature:[NSURL fileURLWithPath:oneDir.path]包括属性forkeys:[NSArray arraywhithobject:self.foreachsales callanaraywhithindicesoftumbnailskeys]选项:无错误:无]?在上面,我的数组是
self.foreachSalesCallAnarrayWithindicesOfTumbnailskeys
,我的路径是
oneDir.path
否,只需替换oneDir.path部分。另一个数组是一个属性键数组,用于确定遍历顺序,非常适合您的答案。我明天早上去看看!非常感谢你的回答。我会在早上检查,但我认为这只是对阵列进行排序,而不是对磁盘上的文件进行排序