Получение ключей от NSDictionary упорядоченным способом - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть ответ JSON, подобный этому:

 {
    "graphdata": {
        "2018-02-27 to 2018-03-05": {
            "historical": 2.93,
            "datewise": 2.82,
            "ordno": 3595,
            "revno": 89
        },
        "2018-03-06 to 2018-03-12": {
            "historical": 2.92,
            "datewise": 2.62,
            "ordno": 3780,
            "revno": 87
        },
        "2018-03-13 to 2018-03-19": {
            "historical": 2.92,
            "datewise": 3.16,
            "ordno": 3742,
            "revno": 86
        },
        "2018-03-20 to 2018-03-26": {
            "historical": 2.93,
            "datewise": 3.17,
            "ordno": 3745,
            "revno": 70
        },
        "2018-03-27 to 2018-04-02": {
            "historical": 2.93,
            "datewise": 3.08,
            "ordno": 4242,
            "revno": 84
        },
        "2018-04-03 to 2018-04-09": {
            "historical": 2.93,
            "datewise": 3.29,
            "ordno": 3575,
            "revno": 79
        },
        "2018-04-10 to 2018-04-16": {
            "historical": 2.94,
            "datewise": 3.19,
            "ordno": 3629,
            "revno": 69
        },
        "2018-04-17 to 2018-04-23": {
            "historical": 2.94,
            "datewise": 3.33,
            "ordno": 4211,
            "revno": 42
        },
        "2018-04-24 to 2018-04-30": {
            "historical": 2.94,
            "datewise": 0,
            "ordno": 1638,
            "revno": 0
        }
    }
}

Теперь, когда я использую метод allKeys, я получаю ключи неупорядоченным образом, как это:

(
    "2018-03-13 to 2018-03-19",
    "2018-04-03 to 2018-04-09",
    "2018-03-20 to 2018-03-26",
    "2018-04-10 to 2018-04-16",
    "2018-04-17 to 2018-04-23",
    "2018-04-24 to 2018-04-30",
    "2018-03-27 to 2018-04-02",
    "2018-02-27 to 2018-03-05",
    "2018-03-06 to 2018-03-12"
)

Как получить их упорядоченным образом, например, начиная с: «2018-02-27 до 2018-03-05»,

Ответы [ 4 ]

0 голосов
/ 27 апреля 2018

Я решил проблему с помощью sortedArrayUsingComparator:

   NSArray *sortedKeys = [[myDictionary allKeys] sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
        return [a compare:b];
    }];
0 голосов
/ 27 апреля 2018
(((jsonDict.object(forKey: "graphdata") as! NSDictionary).allKeys) as! [String]).sorted(by: <) as NSArray

здесь jsonDict - ваш родительский NSDictionary

0 голосов
/ 27 апреля 2018

Каждый словарь - это неупорядоченная коллекция пар ключ-значение.

Используйте экземпляр DictionaryLiteral , когда вам нужен заказанный коллекция пар ключ-значение и не требует быстрого поиска ключа что обеспечивает тип Dictionary.

0 голосов
/ 27 апреля 2018
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd"];
NSArray *sortedArray = [yourArray sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
    NSDate *d1 = [df dateFromString: obj1];
    NSDate *d2 = [df dateFromString: obj2];
    return [d1 compare: d2];
}];

Примечание: установить формат даты в соответствии с вашей датой

...