![](/img/trans.png)
[英]How to access dictionary value by key inside array of dictionary on Swift 3?
[英]Don't know how to access array data inside dictionary [: []], Swift, iOS
我被這個家伙困住了[:[]]。 如您所見,目前在 function 內部,我使用 [0] 來訪問值,但是使用這種類型的解決方案,我只能訪問數組的第一個元素。 如何訪問所有值? 我嘗試使用 for in 循環,但無法解決它...
提前致謝!
func tripServices(tripId: String) {
networkManager.getBookedTripsDetails(endpoint: "/v1/bookings/\(tripId)", tripId: tripId) { [unowned self] (safeTripsDetails) in
DispatchQueue.main.async {
self.bookedTripDetails = self.createScreenData(from: safeTripsDetails!, singleTrip: self.singleTrip!)
self.tableView.reloadData()
}
}
}
func createScreenData(from data: [String: [BookingService]], singleTrip: BookedTripsForView) -> [DetailsAboutServiceForView] {
return data.map{ ( data) -> DetailsAboutServiceForView in
return DetailsAboutServiceForView(id: singleTrip.id,
destination: data.value[0].destination,
tripStatus: data.value[0].status,
tripStartTime: data.value[0].startDate,
serviceName: data.value[0].serviceName,
serviceId: data.value[0].serviceId)
}
}
如果您有一本 arrays 字典,並且您希望您的 output 是一個包含所有 arrays 的單個數組,那么您可以通過多種方式組合成一個不同類型的數組。
我沒有嘗試計算您的數據類型,而是使用簡單的結構敲出了一個示例:
//Source struct
struct Person {
let name: String
let age: Int
}
//Output struct
struct Employee {
let name: String
let age: Int
let salary: Int?
}
let dictOfArrays = ["key1": [Person(name: "Bob", age: 36),
Person(name: "Felecia", age: 27),
Person(name: "Armin", age: 19)],
"key2": [Person(name: "Janet", age: 57),
Person(name: "John", age: 12),
Person(name: "Karen", age: 43)]
]
//Create an empty array for the output
var output = [Employee]()
//Loop through the dictionaries
dictOfArrays.forEach { (_, values) in
values.forEach { person in
//Only those who are >=18 can be employees
if person.age >= 18 {
output.append( Employee(name: person.name, age: person.age, salary: nil))
}
}
}
//Logs the resulting array of Employee structs.
output.forEach { print($0) }
正如 Alexander 在他的評論中指出的那樣,您可以在一個語句中執行上述操作,而無需創建數組 var 並使用 flatmap、filter 和 map 的組合附加到它:
let output = dictOfArrays.flatMap { (_, values) in
values.filter { $0.age >= 18 }
.map { person in
Employee(name: person.name, age: person.age, salary: nil)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.