Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用对象命令NSArray_Ios_Objective C_Sorting_Nsarray - Fatal编程技术网

Ios 使用对象命令NSArray

Ios 使用对象命令NSArray,ios,objective-c,sorting,nsarray,Ios,Objective C,Sorting,Nsarray,我有一本包含以下数据的NSDictionary: (lldb) po allFriends { 71685207018702188 = { id = 71685207018702188; name = "mikeziri "; username = mi; }; 93374822540641772 = { id = 93374822540641772; name = "Alan

我有一本包含以下数据的NSDictionary

(lldb) po allFriends
{
    71685207018702188 =     {
        id = 71685207018702188;
        name = "mikeziri ";
        username = mi;
    };
    93374822540641772 =     {
        id = 93374822540641772;
        name = "Alan Weclipse";
        username = zuka;
    };
    96553685978449395 =     {
        id = 96553685978449395;
        name = "Monica Weclipse";
        username = amonica;
    };
    96556113096345076 =     {
        id = 96556113096345076;
        name = Xavier;
        username = branko;
    };
    97017008427632119 =     {
        id = 97017008427632119;
        name = "Dario Weclipse";
        username = tarzan;
    };
}
我正在根据名称对这些对象进行排序,如果它们没有名称,我将使用用户名。为此,我使用名称和id创建了一个新的NSDictionary,并在方法末尾按名称对它们进行排序。对它们进行排序的代码如下所示:

- (NSArray*)orderFriends
{
    NSMutableDictionary* newFriendsDict = [[NSMutableDictionary alloc] init];

    for (int i=0; i<[allFriends count];i++)
    {
        NSMutableDictionary* friendsDict = [[NSMutableDictionary alloc] init];
        NSDictionary* friend = [allFriends objectForKey:[NSString stringWithFormat:@"%@", [sortedKeysFriends objectAtIndex:i]]];

        if ([[friend objectForKey:@"name"] length] != 0)
        {
            [friendsDict setObject:[friend objectForKey:@"id"] forKey:@"id"];
            [friendsDict setObject:[NSString stringWithFormat:@"%@", [friend objectForKey:@"name"]] forKey:@"name"];
        }
        else
        {
            [friendsDict setObject:[friend objectForKey:@"id"] forKey:@"id"];
            [friendsDict setObject:[NSString stringWithFormat:@"%@", [friend objectForKey:@"username"]] forKey:@"name"];
        }

        [newFriendsDict setObject:friendsDict forKey:[NSNumber numberWithInt:i]];
    }

    NSArray* sp = nil;
    sp = [[newFriendsDict allValues] sortedArrayUsingComparator:^(id obj1, id obj2){
        NSString *one = [NSString stringWithFormat:@"%@", [obj1 objectForKey:@"name"]];
        NSString *two = [NSString stringWithFormat:@"%@", [obj2 objectForKey:@"name"]];

        return [one compare:two];
    }];

    return sp;
}
-(NSArray*)订单朋友
{
NSMutableDictionary*newFriendsDict=[[NSMutableDictionary alloc]init];

对于(int i=0;i区分大小写。使所有字符串变小或变大。

区分大小写。使所有字符串变小或变大。

区分大小写。使所有字符串变小或变大。

您也可以更改
返回[一个比较:两个];


return[一个比较:两个选项:选项:NSCaseInsensitiveSearch];


然后它将按字母顺序排列,无论是大写还是小写…

您也可以更改
返回[一个比较:两个];


return[一个比较:两个选项:选项:NSCaseInsensitiveSearch];


然后它将按字母顺序排列,无论是大写还是小写…

您也可以更改
返回[一个比较:两个];


return[一个比较:两个选项:选项:NSCaseInsensitiveSearch];


然后它将按字母顺序排列,无论是大写还是小写…

您也可以更改
返回[一个比较:两个];


return[一个比较:两个选项:选项:NSCaseInsensitiveSearch];


然后它将按字母顺序排列,不管是大写还是小写…

有几件事:没有理由为了排序而建立不同的词典,也没有理由不这样做

您已经找到了sortedArrayUsingComparator方法。该方法使用一个用于比较对象对的块,并返回一个排序数组。您可以使用该方法实现所需的任何排序条件

我建议编写一个comparator块来比较对象的名称属性,除非它是空的,如果它是空的,则使用username。它只需要几行代码:

NSArray *sortedFriends = [[allFriends allValues] sortedArrayUsingComparator:
                          ^(NSDictionary *obj1, NSDictionary *obj2)
{
    NSString* key1 = obj1[@"name"] ? obj1[@"name"] : obj1[@"username"];
    NSString* key2 = obj2[@"name"] ? obj2[@"name"] : obj2[@"username"];
    return [key1 caseInsensitiveCompare: key2];
}];
编辑:我刚刚注意到(从你对我文章的编辑中)你是从一个字典开始的,而不是从一个数组开始的。那么你想做的是创建一个字典中所有值的排序数组?放弃字典中所有项的键,最终得到一个值的排序数组,这可以接受吗


您可以做的另一件事是构建一个字典键数组,根据您的排序标准进行排序。然后您可以使用键数组按排序顺序从字典中提取项目。

有几件事:没有理由为了排序而构建不同的字典,也没有理由不这样做

您已经找到了sortedArrayUsingComparator方法。该方法使用一个用于比较对象对的块,并返回一个排序数组。您可以使用该方法实现所需的任何排序条件

我建议编写一个comparator块来比较对象的名称属性,除非它是空的,如果它是空的,则使用username。它只需要几行代码:

NSArray *sortedFriends = [[allFriends allValues] sortedArrayUsingComparator:
                          ^(NSDictionary *obj1, NSDictionary *obj2)
{
    NSString* key1 = obj1[@"name"] ? obj1[@"name"] : obj1[@"username"];
    NSString* key2 = obj2[@"name"] ? obj2[@"name"] : obj2[@"username"];
    return [key1 caseInsensitiveCompare: key2];
}];
编辑:我刚刚注意到(从你对我文章的编辑中)你是从一个字典开始的,而不是从一个数组开始的。那么你想做的是创建一个字典中所有值的排序数组?放弃字典中所有项的键,最终得到一个值的排序数组,这可以接受吗


您可以做的另一件事是构建一个字典键数组,根据您的排序标准进行排序。然后您可以使用键数组按排序顺序从字典中提取项目。

有几件事:没有理由为了排序而构建不同的字典,也没有理由不这样做

您已经找到了sortedArrayUsingComparator方法。该方法使用一个用于比较对象对的块,并返回一个排序数组。您可以使用该方法实现所需的任何排序条件

我建议编写一个comparator块来比较对象的名称属性,除非它是空的,如果它是空的,则使用username。它只需要几行代码:

NSArray *sortedFriends = [[allFriends allValues] sortedArrayUsingComparator:
                          ^(NSDictionary *obj1, NSDictionary *obj2)
{
    NSString* key1 = obj1[@"name"] ? obj1[@"name"] : obj1[@"username"];
    NSString* key2 = obj2[@"name"] ? obj2[@"name"] : obj2[@"username"];
    return [key1 caseInsensitiveCompare: key2];
}];
编辑:我刚刚注意到(从你对我文章的编辑中)你是从一个字典开始的,而不是从一个数组开始的。那么你想做的是创建一个字典中所有值的排序数组?放弃字典中所有项的键,最终得到一个值的排序数组,这可以接受吗


您可以做的另一件事是构建一个字典键数组,根据您的排序标准进行排序。然后您可以使用键数组按排序顺序从字典中提取项目。

有几件事:没有理由为了排序而构建不同的字典,也没有理由不这样做

您已经找到了sortedArrayUsingComparator方法。该方法使用一个用于比较对象对的块,并返回一个排序数组。您可以使用该方法实现所需的任何排序条件

我建议编写一个comparator块来比较对象的名称属性,除非它是空的,如果它是空的,则使用username。它只需要几行代码:

NSArray *sortedFriends = [[allFriends allValues] sortedArrayUsingComparator:
                          ^(NSDictionary *obj1, NSDictionary *obj2)
{
    NSString* key1 = obj1[@"name"] ? obj1[@"name"] : obj1[@"username"];
    NSString* key2 = obj2[@"name"] ? obj2[@"name"] : obj2[@"username"];
    return [key1 caseInsensitiveCompare: key2];
}];
编辑:我刚刚注意到(从你对我文章的编辑中)你是从一个字典开始的,而不是从一个数组开始的。那么你想做的是创建一个字典中所有值的排序数组?放弃字典中所有项的键,最终得到一个值的排序数组,这可以接受吗

您可以做的另一件事是构建一个字典键数组,根据您的排序标准进行排序