【问题标题】:swift dictionary change order of elements automatically [Swift]快速字典自动更改元素的顺序[Swift]
【发布时间】:2018-08-25 21:56:03
【问题描述】:

在我的 swift 应用程序中,我有以下功能:

func generateTimetable() -> [String:String] {

    var dayCellTFText = [String]()

    for i in 1...7 {
        let cell = tableView.cellForRow(at: [0,i]) as! DayCell
        dayCellTFText.append(cell.timetableTextField.text!)
    }

    let timetable = ["monday":dayCellTFText[0],"thuesday":dayCellTFText[1],"wednesday":dayCellTFText[2],"thursday":dayCellTFText[3],"friday":dayCellTFText[4],"saturday":dayCellTFText[5],"sunday":dayCellTFText[6]]
    return timetable
}

当我调用函数时,例如 print(generateTimetable()) 这是输出:

["thuesday": "", "wednesday": "", "saturday": "", "thursday": "", "monday": "", "friday": "", "sunday": ""]

问题是字典的元素改变了位置! 我该如何解决这个问题?

【问题讨论】:

  • 字典是一个无序的集合。您需要的是根据其键键对字典进行排序,并使用生成的键/值元素数组。
  • 好,我用地图功能
  • 离题:你打错字了:星期二不是星期四
  • 恭喜你!

标签: swift dictionary


【解决方案1】:

对于generateTimetable() 的返回值,使用[String : String] 是错误的选择。如果你想要一个有序的集合,你应该使用数组。问题是数组包含的类型是什么?以下是两种可能的解决方案:

  1. 一个元组:

    func generateTimetable() -> [(String,String)] {
    
        var dayCellTFText = [String]()
    
        for i in 1...7 {
            let cell = tableView.cellForRow(at: [0,i]) as! DayCell
            dayCellTFText.append(cell.timetableTextField.text!)
        }
    
        let timetable = [("monday",dayCellTFText[0]),
                         ("tuesday",dayCellTFText[1]),
                         ("wednesday",dayCellTFText[2]),
                         ("thursday",dayCellTFText[3]),
                         ("friday",dayCellTFText[4]),
                         ("saturday",dayCellTFText[5]),
                         ("sunday",dayCellTFText[6])]
        return timetable
    }
    
  2. 一个结构

    struct TableEntry {
        let nameOfDay: String
        let textFieldtext: String
    }
    
    func generateTimetable() -> [TableEntry] {
    
        var dayCellTFText = [String]()
    
        for i in 1...7 {
            let cell = tableView.cellForRow(at: [0,i]) as! DayCell
           dayCellTFText.append(cell.timetableTextField.text!)
        }
    
        let timetable = [ TableEntry(nameOfDay: "monday", textFieldtext: dayCellTFText[0]),
                          TableEntry(nameOfDay: "tuesday", textFieldtext: dayCellTFText[0]),
                          TableEntry(nameOfDay: "wednesday", textFieldtext: dayCellTFText[0]),
                          TableEntry(nameOfDay: "thursday", textFieldtext: dayCellTFText[0]),
                          TableEntry(nameOfDay: "friday", textFieldtext: dayCellTFText[0]),
                          TableEntry(nameOfDay: "saturday", textFieldtext: dayCellTFText[0]),
                          TableEntry(nameOfDay: "sunday", textFieldtext: dayCellTFText[0]),
                          TableEntry(nameOfDay: "monday", textFieldtext: dayCellTFText[0])]
        return timetable
    }
    

因此返回类型将被固有地排序。如果您仍然对按字典键排序感兴趣,here 是一个已经回答的问题。但这假设键已经具有数字或字母顺序(或任何排序顺序)。但是字符串“monday”、“tuesday”、...、“sunday”不是按字母顺序排列的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 2011-10-04
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    相关资源
    最近更新 更多