【问题标题】:Swift Fatal error: Array index is out of range when inserting an elementSwift 致命错误:插入元素时数组索引超出范围
【发布时间】:2019-01-02 06:11:12
【问题描述】:

我正在尝试按年龄对这组字典进行排序。 当我尝试遍历朋友数组(最后一个 for in 循环)并在特定索引处插入时,我收到一个致命错误:

插入元素时数组索引超出范围。

let friends = [
    [
        "name" : "Alex",
        "age" : 23
    ],
    [
        "name" : "Massi",
        "age" : 38
    ],
    [
        "name" : "Sara",
        "age" : 16
    ],
    [
        "name" : "Leo",
        "age" : 8
    ]
]

var friendsSortedByAge: [[String : Any]] = [[:]]
var tempArrayOfAges: [Int] = []

for friend in friends {
    if let age = friend["age"] as? Int {
        tempArrayOfAges.append(age)
    }
}

tempArrayOfAges.sort()

for friend in friends {
    for n in 0..<tempArrayOfAges.count {
        if let age = friend["age"] as? Int {
            if age == tempArrayOfAges[n] {
                friendsSortedByAge.insert(friend, at: n)
            }
        }
    }
}

print(tempArrayOfAges)
print(friendsSortedByAge)

【问题讨论】:

标签: arrays swift sorting for-loop


【解决方案1】:

您不能在大于数组中对象数量的索引处插入对象。对年龄数组进行排序后,索引不再同步,这会导致异常。

但是,您可以以更简单(且无错误)的方式对数组进行排序

let friends = [
    [
        "name" : "Alex",
        "age" : 23
    ],
    [
        "name" : "Massi",
        "age" : 38
    ],
    [
        "name" : "Sara",
        "age" : 16
    ],
    [
        "name" : "Leo",
        "age" : 8
    ]
]

let friendsSortedByAge = friends.sorted(by: {($0["age"] as! Int) < $1["age"] as! Int})
print(friendsSortedByAge)

【讨论】:

  • 是的,这更容易且无错误,谢谢!那么之前的问题是我试图在一个空数组中插入一个对象并且索引不存在?
  • 是的,只有索引0...array.count 是有效的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多