Ios 使用对象命令NSArray
我有一本包含以下数据的NSDictionary: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
(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];
}];
编辑:我刚刚注意到(从你对我文章的编辑中)你是从一个字典开始的,而不是从一个数组开始的。那么你想做的是创建一个字典中所有值的排序数组?放弃字典中所有项的键,最终得到一个值的排序数组,这可以接受吗
您可以做的另一件事是构建一个字典键数组,根据您的排序标准进行排序