如何按 2 column/key 对对象的 NSArray 进行排序
How to sort an NSArray of objects by 2 column/key
我想使用一个或多个基于 属性 的对象条件对数组进行排序。
数组中的每个对象都包含一个对象,该对象又包含一个数组 2 个或更多 NSString 属性。
我们无法使用 sortedArrayUsingDescriptors 进行排序:因为要比较的字符串不是要排序的数组对象的 属性。
说,
数组有对象,这些对象有两个属性,firstName 和 lastName。
我想按两个条件对数组进行排序,
1- 按名字排序 ascending/descending 数组
2- 然后当 firstName 相同时再次按 lastName 对数组 ascending/descending 排序。
到目前为止,我尝试了插入排序来按一个对象排序。如果我想按一个条件排序,效果很好。
看了之后发现了这个问题
Xcode sort array by specific (NSString) dictionary key (like sql query)
但无人接听
我们将不胜感激。
使用 sortedArrayUsingDescriptors:
(或对应的可变数组)对数组进行排序,并为数组提供 2 个排序描述符(第一个用于名字,第二个用于姓氏)。
如果您想创建自己的算法,那么这个高级算法视图可以帮助您:-
第 1 步:创建一个桶,其中 firstName 作为值,lastnames 作为特定值的列表(意味着具有相同 fistName 的 lastNames 将在同一个列表中)
第 2 步:按降序对(姓氏)列表进行排序
第 3 步:按升序对 firstName 的存储桶进行排序
第 4 步:重新创建数据库
我琢磨了一会儿,得到了答案
这个自定义写法
[self getStringforObject:obj2 forConditionInKey:condition.key];
请问return对象中我要比较的字符串
NSArray * allSortedObjects= [allobjects sortedArrayUsingComparator:^NSComparisonResult(id obj1 , id obj2)
{
for (MYCondition *condition in [conditionArray allobjects] )
{
if (condition.orderType==NSOrderedSame)
{
continue; // breaks when no sorting is needed
}
NSString * string1=[self getStringforObject:obj1 forConditionInKey:condition.key];
NSString * string1=[self getStringforObject:obj2 forConditionInKey:condition.key];
NSComparisonResult result=[string1 compare:string2 options:NSCaseInsensitiveSearch | NSNumericSearch];
if (result == NSOrderedSame)
{
continue;
}
else if(condition.orderType==NSOrderedDescending)
{//when sorting needed is descending.
if (rexult==NSOrderedAscending)
{
return NSOrderedDescending;
}
else
{
return NSOrderedAscending;
}
}
return result;
}
return NSOrderedSame;
}];
我想使用一个或多个基于 属性 的对象条件对数组进行排序。
数组中的每个对象都包含一个对象,该对象又包含一个数组 2 个或更多 NSString 属性。
我们无法使用 sortedArrayUsingDescriptors 进行排序:因为要比较的字符串不是要排序的数组对象的 属性。
说,
数组有对象,这些对象有两个属性,firstName 和 lastName。
我想按两个条件对数组进行排序,
1- 按名字排序 ascending/descending 数组 2- 然后当 firstName 相同时再次按 lastName 对数组 ascending/descending 排序。
到目前为止,我尝试了插入排序来按一个对象排序。如果我想按一个条件排序,效果很好。
看了之后发现了这个问题 Xcode sort array by specific (NSString) dictionary key (like sql query)
但无人接听
我们将不胜感激。
使用 sortedArrayUsingDescriptors:
(或对应的可变数组)对数组进行排序,并为数组提供 2 个排序描述符(第一个用于名字,第二个用于姓氏)。
如果您想创建自己的算法,那么这个高级算法视图可以帮助您:-
第 1 步:创建一个桶,其中 firstName 作为值,lastnames 作为特定值的列表(意味着具有相同 fistName 的 lastNames 将在同一个列表中)
第 2 步:按降序对(姓氏)列表进行排序
第 3 步:按升序对 firstName 的存储桶进行排序
第 4 步:重新创建数据库
我琢磨了一会儿,得到了答案
这个自定义写法
[self getStringforObject:obj2 forConditionInKey:condition.key];
请问return对象中我要比较的字符串
NSArray * allSortedObjects= [allobjects sortedArrayUsingComparator:^NSComparisonResult(id obj1 , id obj2)
{
for (MYCondition *condition in [conditionArray allobjects] )
{
if (condition.orderType==NSOrderedSame)
{
continue; // breaks when no sorting is needed
}
NSString * string1=[self getStringforObject:obj1 forConditionInKey:condition.key];
NSString * string1=[self getStringforObject:obj2 forConditionInKey:condition.key];
NSComparisonResult result=[string1 compare:string2 options:NSCaseInsensitiveSearch | NSNumericSearch];
if (result == NSOrderedSame)
{
continue;
}
else if(condition.orderType==NSOrderedDescending)
{//when sorting needed is descending.
if (rexult==NSOrderedAscending)
{
return NSOrderedDescending;
}
else
{
return NSOrderedAscending;
}
}
return result;
}
return NSOrderedSame;
}];