繁体   English   中英

不知道如何访问字典 [: []]、Swift、iOS 中的数组数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM