我有这样的数组。
var Array = [Int:[String:Any]]()
我只是更新值
let updateValue = ["Name":tripName!,"date":firstDate,"year":year,"startData":startDateValue,"endDate":endDateValue,"countryName":countrname!,"totelBudjet":totelBudjet,"backgroundImage":arrImages[randomItem],"code":getAddtripeAttibutes.code,"countryIcon":countryIcon] as [String : Any]
Array.updateValue(updateValue, forKey: tripId)
tripId = tripId + 1
我们有如下所述的更多数组数据
旅行键,如:
[0] [1] [2]
[0: ["year": "2019", "tripName": "Test", "backgroundImage": "Europe_Trip", "code": "DZD", "startData": 2019-05-30 10:14:11 +0000, "date": "May 30 - May 31", "endDate": 2019-05-31 10:14:11 +0000, "totelBudjet": "5000 DZD", "countryIcon": "dz", "countryName": "Algeria"], 1: ["date": "May 30 - May 31", "backgroundImage": "Europe_Trip", "endDate": 2019-05-31 10:14:43 +0000, "code": "DZD", "countryName": "Algeria", "tripName": "Gg", "countryIcon": "dz", "totelBudjet": "500 DZD", "startData": 2019-05-30 10:14:43 +0000, "year": "2019"], 2: ["year": "2019", "backgroundImage": "Asia_Trip", "endDate": 2019-05-31 10:15:00 +0000, "countryIcon": "al", "totelBudjet": "5800 ALL", "code": "ALL", "tripName": "Bb", "countryName": "Albania", "date": "May 30 - May 31", "startData": 2019-05-30 10:15:00 +0000]]
我已经使用上述数据更新了表格视图
删除一个数组[1]后,它看起来像: 这个
[0] [2]
[0: ["year": "2019", "tripName": "Test", "backgroundImage": "Europe_Trip", "code": "DZD", "startData": 2019-05-30 10:14:11 +0000, "date": "May 30 - May 31", "endDate": 2019-05-31 10:14:11 +0000, "totelBudjet": "5000 DZD", "countryIcon": "dz", "countryName": "Algeria"], 2: ["year": "2019", "backgroundImage": "Asia_Trip", "endDate": 2019-05-31 10:15:00 +0000, "countryIcon": "al", "totelBudjet": "5800 ALL", "code": "ALL", "tripName": "Bb", "countryName": "Albania", "date": "May 30 - May 31", "startData": 2019-05-30 10:15:00 +0000]]
但是我想将键更新为[0] [1]而不是[0] [2]
有人可以帮我吗?
答案 0 :(得分:3)
您为什么要尝试使用字典模仿数组?
如果您有一个像这样的数组。
var array: [[String: Any]] = [["year": "2019"], ["year": "2020"], ["year": "2021"]] // Minimalistic example array
您可以删除该特定位置的值,它会为您提供当前所需的内容。
array.remove(at: 1)
print(array[1])
[“ year”:“ 2021”]
注意-您的数据看起来像JSON响应。因此,您可以在评论中使用@Kamran的建议,并使用符合Trip
的结构Decodable
并直接以Trip
数组的形式获取数据。但是,如果您的JSON格式为键0、1、2 ...,那么您的JSON确实很糟糕,如果可以的话,应该对其进行更改。如果不能,则必须将字典的字典更改为字典数组或更好的结构数组。
答案 1 :(得分:1)
我不太清楚这里的用例,所以我正在尝试涵盖所有可能的情况。
enumerated()
如果只需要添加索引,请在数组上调用enumerated()
方法,例如
var array: [[String: Any]] = [["year": "2019", "tripName": "Trip#1"], ["year": "2020", "tripName": "Trip#2"], ["year": "2021", "tripName": "Trip#3"]]
array.enumerated().forEach { (arg0) in
let (offset, element) = arg0
debugPrint("\(offset) : \(element)")
}
会为每个元素分配一个 offset ,您可以打印或使用其他元素,在我的示例中,控制台上的输出如下所示:
0 : ["tripName": "Trip#1", "year": "2019"]
1 : ["tripName": "Trip#2", "year": "2020"]
2 : ["tripName": "Trip#3", "year": "2021"]
如果您需要实际删除某项,例如
array.remove(at: 1)
并再次调用相同的代码段(如上所述),它会分配 offset ,如下所示:
0 : ["tripName": "Trip#1", "year": "2019"]
1 : ["tripName": "Trip#3", "year": "2021"]
与您要寻找的非常相似。
如果您需要先将字典实际映射到一个数组中(例如,在对JSON
响应进行后处理期间),则可以这样做,例如:
var dictionary: [Int: [String: Any]] = [0: ["year": "2019", "tripName": "Trip#1"], 1: ["year": "2020", "tripName": "Trip#2"], 2: ["year": "2021", "tripName": "Trip#3"]]
var array = dictionary.map { $0.value }
然后您就可以开始使用enumerated()
方法了,就像我上面向您展示的那样。
注意::显然,如果像我一样进行映射,则会丢失原始密钥所拥有的信息,并且在我的示例中,该密钥将被替换为相同的数字,这可能会引起误解,但是如果您意识到offset
和key
是两个完全不同的值,那么在进行映射后,您可能不会感到惊讶。 >