【问题标题】:How to sort an array of dictionary by date?如何按日期对字典数组进行排序?
【发布时间】:2016-02-25 07:26:32
【问题描述】:

我正在从 Facebook 为我的应用程序发布一些帖子,我已将所有帖子数据放入字典中,并且该字典在数组中。现在我有来自 Facebook 的发布时间,它在字典中作为字符串。我想根据发布时间已知的最新帖子对该数组进行排序。我在 SO 上看到了几个答案,但他们在一个字典中做了我想从不同的字典中做到这一点。

这是我的字典数组,我必须根据字典 postTime 值对数组进行排序。

代码:

var dateFormatter: NSDateFormatter = NSDateFormatter()
                    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
                    var tempArray: NSMutableArray = NSMutableArray()
                    for var i = 0; i < dicts.count; i++ {
                        var dic: NSMutableDictionary = dicts[i] as! NSMutableDictionary
                        let dateConverted: NSDate = dateFormatter.dateFromString(dic["postTime"] as! String)!
                        dic["postTime"] = dateConverted
                        tempArray.addObject(dic)
                    }
                    var descriptor: NSSortDescriptor = NSSortDescriptor(key: "postTime", ascending: true)
                    var descriptors: NSArray = [descriptor]
                    var sortedArray: NSArray = tempArray.sortedArrayUsingDescriptors(descriptors as! [NSSortDescriptor])
                    NSLog("%@", sortedArray)

dicts 是我的字典数组,我必须按照图片中看到的发布时间。

【问题讨论】:

标签: ios swift2 nsarray nsdate nsdictionary


【解决方案1】:
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    dateFormatter.dateFormat = @"'Time: 'yyyy-MMM-dd HH:mm:ss";


    NSMutableArray *tempArray=[NSMutableArray new];
    for(NSInteger i=0;i<yourArrayOfDic.count ;i++){
        NSMutableDictionary *dic =[[NSMutableDictionary alloc] initWithDictionary:[yourArrayOfDic objectAtIndex:i]];
        NSDate *dateConverted = [dateFormatter dateFromString:[dic valueForKey:@"time"]];
        [dic setValue:dateConverted forKey:@"time"];
        [tempArray addObject:dic];
    }


    NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"time" ascending:YES];
    NSArray *descriptors=[NSArray arrayWithObject: descriptor];
    NSArray *sortedArray=[tempArray sortedArrayUsingDescriptors:descriptors];
    NSLog(@"%@",sortedArray);

// 在 Swift 中.. 我在 swift 方面很弱,但目标 c 到 swift 可能会帮助你。让我知道它是否有效!!!!

var dateFormatter: NSDateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "'Time: 'yyyy-MMM-dd HH:mm:ss"
var tempArray: NSMutableArray = NSMutableArray()
for var i = 0; i < yourArrayOfDic.count; i++ {
    var dic: NSMutableDictionary = yourArrayOfDic[i]
    var dateConverted: NSDate = dateFormatter.dateFromString(dic["time"])
    dic["time"] = dateConverted
    tempArray.addObject(dic)
}
var descriptor: NSSortDescriptor = NSSortDescriptor(key: "time", ascending: true)
var descriptors: NSArray = [descriptor]
var sortedArray: NSArray = tempArray.sortedArrayUsingDescriptors(descriptors)
NSLog("%@", sortedArray)

【讨论】:

  • 在这一行 let dateConverted: NSDate = dateFormatter.dateFromString(dic["postTime"]) 它显示错误无法转换类型“AnyObject?”的值到预期的参数类型“字符串”。
  • var dateConverted: NSDate = dateFormatter.dateFromString(dic["time"] as!String)
  • 现在它在展开可选值时崩溃,显示意外发现 nil。
【解决方案2】:

IOS Swift 3.2

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00")
//   dateFormatter.locale = Locale.current
let tempArray: NSMutableArray = NSMutableArray()
for i in 0 ..< self.yourarr.count{
    var dicdata  = self.yourarr[i] as! [String : Any]

    var dateConverted = dateFormatter.date(from: dicdata["time"] as! String)
    dicdata["time"] = dateConverted
                    tempArray.add(dicdata)
 }
 var descriptor: NSSortDescriptor = NSSortDescriptor(key: "time", ascending: true)
 var descriptors: NSArray = [descriptor]
 var sortedArray: NSArray = tempArray.sortedArray(using: descriptors as! [NSSortDescriptor]) as NSArray
 NSLog("%@", sortedArray)

【讨论】:

    猜你喜欢
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2016-11-07
    • 1970-01-01
    相关资源
    最近更新 更多