如何在iOS中对数组进行排序?
我是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:
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;
}];