将字典值附加到 Swift 中的数组
Appending dictionary values to array in Swift
我有一个类型的字典
[String: Object]
,其中 MyObject
是 AnotherObject
的数组。我需要对其进行排序,因为我需要用 Keys.count
个部分和每个部分中的 Object.count
行数填充 UITableView。我将所有键都放在一个数组中,但是当我尝试将值附加到另一个数组时,我得到 Thread 1: EXC_BAD_ACCESS (code=1, address=0x8)
.
这是我正在使用的代码
var dictionary = [String: MyObject]()
var sortedKeys: [String]?
var sortedValues = [MyObject]()
func sortItems() {
self.sortedKeys = self.dictionary.keys.sorted(by: >)
let sortedDict = self.dictionary.sorted(by: {[=11=].key > .key})
for (_, value) in sortedDict {
print(value)
self.sortedValues.append(value)
}
}
在 for 循环中,当我不尝试将值附加到数组时,它会打印所有排序的值,当我想将它们放在数组中时,问题就来了。
编辑
字典是这样的:
struct Object: Decodable {
let elements: [AnotherObject]
}
struct AnotherObject: Decodable {
let time, Id, Status: Int?
let date, startTime, endTime: String?
}
dictionary: [String: Object]
所以键是数字(代表天),每天都有一个对象和(至少)一个另一个对象。
我从 API.
得到 JSON
提前致谢
您应该只对键进行排序,然后将该数组用于字典中的 select 并附加您的 sortedValues
数组。我把 sortedKeys
变成了局部变量
func sortItems() {
let sortedKeys = self.dictionary.keys.sorted(by: >)
for key in sortedKeys {
if let obj = dictionary[key] {
self.sortedValues.append(obj)
}
}
}
我不知道这是否会对崩溃产生影响,但另一种方法是让函数 return 成为数组
func sortItems() -> [Object] {
let sortedKeys = self.dictionary.keys.sorted(by: >)
var result: [Object]()
for key in sortedKeys {
if let obj = dictionary[key] {
result.append(obj)
}
}
return result
}
然后称之为
self.sortedValues = sortItems()
你根本不使用 sortedKeys
并且字典排序的结果是元组的 数组 所以字典枚举语法 for (key, value) in
是错
可能你想要这个
func sortItems() {
let sortedKeys = self.dictionary.keys.sorted(by: >)
for key in sortedKeys {
let value = self.dictionary[key]!
print(value)
self.sortedValues.append(value)
}
}
强制解包该值是 100% 安全的,因为密钥显然存在。
我有一个类型的字典
[String: Object]
,其中 MyObject
是 AnotherObject
的数组。我需要对其进行排序,因为我需要用 Keys.count
个部分和每个部分中的 Object.count
行数填充 UITableView。我将所有键都放在一个数组中,但是当我尝试将值附加到另一个数组时,我得到 Thread 1: EXC_BAD_ACCESS (code=1, address=0x8)
.
这是我正在使用的代码
var dictionary = [String: MyObject]()
var sortedKeys: [String]?
var sortedValues = [MyObject]()
func sortItems() {
self.sortedKeys = self.dictionary.keys.sorted(by: >)
let sortedDict = self.dictionary.sorted(by: {[=11=].key > .key})
for (_, value) in sortedDict {
print(value)
self.sortedValues.append(value)
}
}
在 for 循环中,当我不尝试将值附加到数组时,它会打印所有排序的值,当我想将它们放在数组中时,问题就来了。
编辑
字典是这样的:
struct Object: Decodable {
let elements: [AnotherObject]
}
struct AnotherObject: Decodable {
let time, Id, Status: Int?
let date, startTime, endTime: String?
}
dictionary: [String: Object]
所以键是数字(代表天),每天都有一个对象和(至少)一个另一个对象。 我从 API.
得到 JSON提前致谢
您应该只对键进行排序,然后将该数组用于字典中的 select 并附加您的 sortedValues
数组。我把 sortedKeys
变成了局部变量
func sortItems() {
let sortedKeys = self.dictionary.keys.sorted(by: >)
for key in sortedKeys {
if let obj = dictionary[key] {
self.sortedValues.append(obj)
}
}
}
我不知道这是否会对崩溃产生影响,但另一种方法是让函数 return 成为数组
func sortItems() -> [Object] {
let sortedKeys = self.dictionary.keys.sorted(by: >)
var result: [Object]()
for key in sortedKeys {
if let obj = dictionary[key] {
result.append(obj)
}
}
return result
}
然后称之为
self.sortedValues = sortItems()
你根本不使用 sortedKeys
并且字典排序的结果是元组的 数组 所以字典枚举语法 for (key, value) in
是错
可能你想要这个
func sortItems() {
let sortedKeys = self.dictionary.keys.sorted(by: >)
for key in sortedKeys {
let value = self.dictionary[key]!
print(value)
self.sortedValues.append(value)
}
}
强制解包该值是 100% 安全的,因为密钥显然存在。