Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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中对数组进行排序?_Ios_Sorting_Nsarray_Nsdictionary - Fatal编程技术网

如何在iOS中对数组进行排序?

如何在iOS中对数组进行排序?,ios,sorting,nsarray,nsdictionary,Ios,Sorting,Nsarray,Nsdictionary,我是iOS开发的新手。我的数组包含字典值键,如 for(NSDictionary *dict in self.imageArray ) { [self.imagesa addObject:@{@"demopage":[dict valueForKey:@"demopage"]}]; } 这里我的“demoPage”键值包含两个类似于“link”和“Pageno”的键,这里的链接包含我的ImageURL,“Pageno”包含类似于的页码 -demopage { link:

我是iOS开发的新手。我的数组包含字典值键,如

for(NSDictionary *dict in self.imageArray )
    {
    [self.imagesa addObject:@{@"demopage":[dict valueForKey:@"demopage"]}];
    }
这里我的“demoPage”键值包含两个类似于“link”和“Pageno”的键,这里的链接包含我的ImageURL,“Pageno”包含类似于的页码

-demopage
{
link:"URL",
 page_no: "12"
},
{
link:"URL",
page_no: "13"
},
{
link: "URL",
page_no: "14"
},
{
link: "",
page_no: "3"
},
{
 link:"URL",
 page_no: "31"
},
{
link: "URL",
page_no: "32"
},
当我解析它时,我会得到这个范围内的数据,比如12,13,14,3,31,32。我想把这个图像按页码排列,我想按1,2,3排列到数据数组。

试试:

[self.dataArray sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"page_no" ascending:YES]]]

出于某种原因,您将页码存储为字符串而不是数字。因此,一个简单的排序将按字母顺序排序

i、 e.1、10、11、12、2、20、21、235、3、35、4

你需要它来按字母数字排序,你可以这样做

NSSortDescriptor *alphaNumSD = [NSSortDescriptor sortDescriptorWithKey:@"page_no" ascending:YES comparator:^(NSString *string1, NSString *string2) {
    return [string1 compare:string2 options:NSNumericSearch];
}];

NSArray *sortedArray = [self.theArrayYouWantToSort sortedArrayUsingDescriptors:@[alphaNumSD]];

实例 输出 它肯定能按预期工作。

NSArray*ordersArray=info[@“result”];
NSArray *ordersArray = info[@"result"];

NSArray *properSortedArray = [ordersArray sortedArrayUsingComparator:
                              ^(id obj1, id obj2)
                              {
                                  NSInteger value1 = [[obj1 objectForKey: @"orderId"] intValue];
                                  NSInteger value2 = [[obj2 objectForKey: @"orderId"] intValue];
                                  if (value1 > value2)
                                  {
                                      return (NSComparisonResult)NSOrderedAscending;
                                  }
                                  if (value1 < value2)
                                  {
                                      return (NSComparisonResult)NSOrderedDescending;
                                  }
                                  return (NSComparisonResult)NSOrderedSame;
                              }];
NSArray*properSortedArray=[ordersArray SORTEDARRAY USINGComparator: ^(id obj1,id obj2) { NSInteger value1=[[obj1 objectForKey:@“orderId”]intValue]; NSInteger value2=[[obj2 objectForKey:@“orderId”]intValue]; 如果(值1>值2) { 返回(NSComparisonResult)或删除; } 如果(值1<值2) { 返回(NSComparisonResult)或撤销; } 返回(NSComparisonResult)命令名; }];
您尝试过什么吗?让我澄清一下:您想将12、13、14、3、31、32排序为3、12、13、14、31、32吗?因为你的模型中没有1,2…@holex我的数据很长,所以我不写它,但我想从1到我的数据数组计数排序。@Ramesh,所以。。。你到底被困在哪里了?你有没有费心去寻找解决方案?@Ramesh这是因为
page\u no
被奇怪地存储为字符串而不是数字。您需要进行字母数字排序。@Fogmeister这里是我的页面\u没有键值,只有数字值,如1,2,3,4,5,我希望基于我的页面按升序排序没有受尊重的图像。@Ramesh您是否对方法do self的结果进行了排序。imagesa?
sortedArray…
返回排序后的数组,但是您没有将它们赋给任何变量。@Ramesh不要喊!要排序的数组。在你的例子中,它可能是self.imagesa,但很难从你的问题中分辨出来。我是从另一个答案中选出来的。当然,这一点很明显,因为它被称为数组,我正在对它进行排序?我并不是首先喊NSSortDescriptor*alphaNumSD=[NSSortDescriptor SortDescriptor WithKey:@“page_no”升序:YES comparator:^(NSString*string1,NSString*string2){返回[string1比较:string2选项:NSNumericSearch];}]; NSArray*SorterDarray=[self.imagesa SorterDarray使用描述符:@[alphaNumSD]];self.imagesa=[sortedArray mutableCopy];但它不起作用。@Ramesh这是喊叫!!!!!!!!!你说它不起作用是什么意思?对正在发生的事情的描述是无用的。@Ramesh好吧,这里的代码正是你想要做的。显然,您首先需要对正确的数组进行排序,但是没有真正的方法来判断这是哪个数组。在你的问题中你没有真正解释任何事情。除了说“它不起作用”之外,你还没有说什么不起作用。所以我在这里帮不上忙。但是你有所有的代码来做你需要的事情,所以一个upvote和accept会很棒,谢谢。@Fogmeister,希望你不介意我添加了一个例子来证明你的代码是正确的。这实际上与我的代码相同,但有更多的代码。您似乎正在重新实现字符串的字母数字比较。为什么不直接使用字母数字比较来代替字符串呢?
(
        {
        "page_no" = 1;
    },
        {
        "page_no" = 2;
    },
        {
        "page_no" = 3;
    },
        {
        "page_no" = 12;
    },
        {
        "page_no" = 17;
    },
        {
        "page_no" = 23;
    },
        {
        "page_no" = 27;
    }
)
NSArray *ordersArray = info[@"result"];

NSArray *properSortedArray = [ordersArray sortedArrayUsingComparator:
                              ^(id obj1, id obj2)
                              {
                                  NSInteger value1 = [[obj1 objectForKey: @"orderId"] intValue];
                                  NSInteger value2 = [[obj2 objectForKey: @"orderId"] intValue];
                                  if (value1 > value2)
                                  {
                                      return (NSComparisonResult)NSOrderedAscending;
                                  }
                                  if (value1 < value2)
                                  {
                                      return (NSComparisonResult)NSOrderedDescending;
                                  }
                                  return (NSComparisonResult)NSOrderedSame;
                              }];