ios-升序排列NSDictionary

问题描述

升序排列NSDictionary

要升序排列一个NSDictionary,使用如下代码:

NSDictionary *valDict = self.mGetDataDict[key][rowKey];

for (NSString *valueKey in
     [[valDict allKeys] sortedArrayUsingSelector:@selector(compare:)])
{
    if ([valueKey isEqualToString:@"attr"])
    {
        dictRow = self.mGetDataDict[key][rowKey][valueKey];
    }
    else {
        NSString *valKey = self.mGetDataDict[key][rowKey][valueKey];
        [arrSeatsStatus addObject:valKey];
    }
}

输入结果:

1 = off;
10 = off;
2 = on;
3 = on;
4 = on;
5 = on;
6 = on;
7 = on;
8 = on;
9 = on;

需要的结果:

1: "off",
2: "on",
3: "on",
4: "on",
5: "on",
6: "on",
7: "on",
8: "on",
9: "on",
10: "off"

需要的结果是JSON中存在的值。

解决方案

不知道你的json是什么样的格式.是如下这种吗?

{"1":"off","10":"off","2":"on", "3":"on"}

如果是.且我们看到key是整型的话,你可以这样比较来拿到正确的排序结果

NSArray *sortKeys=[[valDict allKeys] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        return [obj1 intValue] > [obj2 intValue];
}];

NSLog(@"sort key:%@",sortKeys);
for (NSString *valueKey in sortKeys) {
    ......
}
时间: 2024-12-22 00:02:45

ios-升序排列NSDictionary的相关文章

把一个字符插入到一个升序排列的字符串中

namespace Tools.Module   {       public class Tools      {            public Tools()           {            }             public static string GetStrFromStr(string src,int Index)          {                if(src.IndexOf(",")==0) src = src.Remove

mysql 数据库-求帮助:mysql 按用户id分组,按照start时间升序排列,取每组前两条条记录

问题描述 求帮助:mysql 按用户id分组,按照start时间升序排列,取每组前两条条记录 BDM_UserID BDM_ListenStartTime BDM_ListenEndTime BDM_LessonName BDM_ListenTimeLength 235 2007-07-17 22:15:00 2007-07-17 22:15:00 英语第一讲<定语从句>(节选) 0 2217 2007-07-17 22:24:00 2007-07-17 22:27:00 英语第一讲<定

java-重写 compareTo后,ArrayList.sort可以升序排列,为什么一般不改成降序呢 ?

问题描述 重写 compareTo后,ArrayList.sort可以升序排列,为什么一般不改成降序呢 ? package interfaces; import java.util.*; //实例数组排序:员工数组排序 /** This program demonstrates the use of the Comparable interface. @version 1.30 2004-02-27 @author Cay Horstmann */ public class EmployeeSo

笔记:mysql升序排列asc,降序排列desc

经常会忘记mysql中升序和降序用什么字符来表示,现在就做个笔记:升序排列asc,降序排列desc,举个例子,下面是按时间降序调用栏目的文章,也即是栏目最新文章 [e:loop={"select classid, classname, classpath from `[!db.pre!]enewsclass` where classid=275 order by classid desc limit 9 ",100,24,0}]<ul><li><a hre

升序排列的数组中是否存在A[i]=i

#include<stdio.h> void equal(int a[],int N) { int i; for(i=0;i<N;i++) { if(i<a[i]) { printf("no exist\n"); printf("%d\n",i); break; } if(i==a[i]) printf("equal %d\n",i); } } int main() { int arr[10]={-5,-1,1,5,7,8

ios-根据日期降序排列数组

问题描述 根据日期降序排列数组 有一个NSDictionary解析到数组,其中一个元素是日期.使用[startimeArray sortUsingSelector:@selector(compare:)];后只能进行升序排列,如何进行降序排列? 非常感谢. 解决方案 NSSortDescriptor *sortDes=[[NSSortDescriptor alloc] initWithKey:@"存储日期的key" ascending:NO]; startimeArray =[star

iOS基础面试题一

一.简答题 1.下面这些方法的方法名是什么? 1 2 3 4 -(void)person -(void)personWithAge; -(void)personWithAge:(int)age; -(void)personWithAge:(int)age name:(NSString *)name; 答:person /   personWithAge  / personWithAge:   /   personWithAge: name: 2.NSArray和NSSet有什么使用区别?    

iOS反骚扰电话-CallKit

iOS10增加了识别骚扰电话的API,有三款主流的软件已经实现.也有一些报道分析 前几天查了查资料,动手写了一个Demo. 原理 电话号码是用Call Directory extension事先存在系统里的,当来电时,系统会查询存储的数据, 根据号码绑定的label,决定直接屏蔽还是显示来电. iOS-CallKit.png When using CallKit's Call Blocking & Identification feature (new in iOS 10), phone num

iOS如何实现每次打开聊天窗口的时候加载之前的全部聊天记录?

问题描述 iOS如何实现每次打开聊天窗口的时候加载之前的全部聊天记录?我现在打开之后只能显示最近两天的记录.不知道是什么原因.如果有现成的代码的话麻烦提供参考一下...谢谢! 解决方案 chatViewController 里面ViewDidLoad中调用    //通过会话管理者获取已收发消息    long long timestamp = [[NSDate date] timeIntervalSince1970] * 1000 + 1;    [self loadMoreMessagesF