在 Swift 中按键中的数字过滤数组



我这里有一个数组:

var allData: Array<Any> = Array()

这是数组内部的内容:

[Type: Optional("web"), Date: Optional("1515970800"), 
Type: Optional("web"), Date: Optional("1515193200"), 
Type: Optional("web"), Date: Optional("1514847600"), 
Type: Optional("web"), Date: Optional("1514674800"), 
Type: Optional("twitter"), Date: Optional("1516590000"), 
Type: Optional("twitter"), Date: Optional("1516590000")]

类型和日期。

如何按Date筛选allData,以便将最高数字排在第一位?

我试过这个:

allData.sorted(by: { $0.date! < $1.date!})

但是我得到错误:

类型为"任何"的值没有成员日期

这是我的结构:

import UIKit
class feedStruct: NSObject {
    var type: String?
    var date: String?
    override init()
    {
    }
    //construct with @name, @address, @latitude, and @longitude parameters
    init(type: String, date: String) {
        self.type = type
        self.date = date
    }
    //prints object's current state
    override var description: String {
        return "Type: (String(describing: type)), Date: (String(describing: date))"
    }
}

如何按日期值过滤它?

我想你的意思

如何按日期对allData进行排序,以便最高的数字在前


首先,我强烈建议将自定义对象声明为具有非可选typedate的结构,以及将 UNIX 时间戳转换为Date实例的初始值设定项。无需使用继承自NSObject的类,也无需使用可选。

struct Feed : CustomStringConvertible {
    let type: String
    let date: Date
    init(type : String, date : String) {
        self.type = type
        self.date = Date(timeIntervalSince1970: TimeInterval(date)!)
    }
    //prints object's current state
    var description: String {
        return "Type: (type), Date: (date))" // please do not misuse `String(describing:`
    }
}

然后将您的allData数组声明为 [Feed](从不声明为 [Any],顺便说一下,这就是错误原因(

var allData = [Feed]()

Feed 实例填充数组

allData = [Feed(type: "web", date: "1515970800"),
         Feed(type: "web", date: "1515193200"),
         Feed(type: "web", date: "1514674800"),
         Feed(type: "web", date: "1516590000"),
         Feed(type: "twitter", date: "1516590000"),
         Feed(type: "twitter", date: "1515970800")]

并按日期降序排序

allData.sorted{ $0.date > $1.date }
var allData = ["15101001", "15250151", "11519501", "15192515"]
var convertedArray: [Date] = []
var dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
for dat in testArray {
var date = dateFormatter.date(from: dat)
convertedArray.append(date!)
}
//Method : 1
convertedArray.sort(){$0 < $1}    
//Method : 2
convertedArray.sorted(by: {$0.timeIntervalSince1970 < 
$1.timeIntervalSince1970})
print(convertedArray)

最新更新