Ios 如何按2列/键对对象数组进行排序
我想使用一个或多个基于属性的对象条件对数组进行排序 数组中的每个对象都包含一个对象,该对象依次具有数组2或更多NSString属性 我们无法使用SorterDarrayUsingDescriptor进行排序:因为要比较的字符串不是要排序的数组对象的属性 说 数组有对象,这些对象有两个属性,firstName和lastName 我想按两个条件对数组进行排序 1-按名字对数组进行升序/降序排序 2-当firstName相同时,再次按lastName对数组进行升序/降序排序 到目前为止,我尝试按一个对象进行插入排序。如果我希望按一个条件进行排序,则效果良好 看了之后,我发现了这个问题 但它没有回答Ios 如何按2列/键对对象数组进行排序,ios,objective-c,iphone,algorithm,sorting,Ios,Objective C,Iphone,Algorithm,Sorting,我想使用一个或多个基于属性的对象条件对数组进行排序 数组中的每个对象都包含一个对象,该对象依次具有数组2或更多NSString属性 我们无法使用SorterDarrayUsingDescriptor进行排序:因为要比较的字符串不是要排序的数组对象的属性 说 数组有对象,这些对象有两个属性,firstName和lastName 我想按两个条件对数组进行排序 1-按名字对数组进行升序/降序排序 2-当firstName相同时,再次按lastName对数组进行升序/降序排序 到目前为止,我尝试按一个对
我们将不胜感激 使用描述符对数组进行排序:(或可变数组对应项),并为数组提供两个排序描述符(第一个用于名字,第二个用于姓氏)。如果您想创建自己的算法,此算法高级视图可以帮助您:-
步骤1:创建一个bucket,其中firstName作为值,lastnames作为特定值的列表(意味着具有相同fistName的lastnames将位于相同的列表中)
步骤2:按降序排列(姓氏)列表
步骤3:按升序对firstName的bucket排序
第四步:重新创建数据库我思考了一会儿,得到了答案 这是一种定制的书写方法
[self getStringforObject:obj2 forConditionInKey:condition.key];
将返回要在对象中比较的字符串
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;
}];
对不起,伙计,这对我的案子不起作用,我会修改我的问题。我遗漏了一个重要的部分。因此,您应该向对象添加一个方法,该方法返回适当的信息进行排序,然后排序描述符就会工作。感谢mate,我使用了
sortedarrayingcomparator: