Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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 如何按2列/键对对象数组进行排序_Ios_Objective C_Iphone_Algorithm_Sorting - Fatal编程技术网

Ios 如何按2列/键对对象数组进行排序

Ios 如何按2列/键对对象数组进行排序,ios,objective-c,iphone,algorithm,sorting,Ios,Objective C,Iphone,Algorithm,Sorting,我想使用一个或多个基于属性的对象条件对数组进行排序 数组中的每个对象都包含一个对象,该对象依次具有数组2或更多NSString属性 我们无法使用SorterDarrayUsingDescriptor进行排序:因为要比较的字符串不是要排序的数组对象的属性 说 数组有对象,这些对象有两个属性,firstName和lastName 我想按两个条件对数组进行排序 1-按名字对数组进行升序/降序排序 2-当firstName相同时,再次按lastName对数组进行升序/降序排序 到目前为止,我尝试按一个对

我想使用一个或多个基于属性的对象条件对数组进行排序

数组中的每个对象都包含一个对象,该对象依次具有数组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: