简短的问题,我有以下结构,我存储在“Salas”
struct SalasMaster {
let id: Int
let nombre: String
let latitud: String
let longitud: String
let piso: String
let observaciones: String
let pabellon: String
}
var Salas = [SalasMaster]()
...receiving data...
...dump(Salas)
example -> SalasMaster
- id: 307
- nombre: "SALA DE PROYECTOS "
- latitud: "-29.96429300"
- longitud: "-71.34937300"
- piso: "1"
- observaciones: ""
- pabellon: "X - Escuela de Ingeniería"
最后我想要的是过滤示例id,此时我得到一个数组,以及所有其他相应的数据
...filter data...
var arrayFiltered = Salas.filter{$0.id == 307}
Print(arrayFiltered) -> [SalasMaster(id: 307, nombre: "SALA DE PROYECTOS ", latitud: "-29.96429300", longitud: "-71.34937300", piso: "1", observaciones: "", pabellon: "X - Escuela de Ingeniería")]
但是我找不到只返回一个我感兴趣从“id”中检索的数据的方法,在这种情况下我只想捕获“latitud”,尽管在另一种情况下我可能需要另一个。
答案 0 :(得分:0)
您可以使用first(where:)
,因为它会为您提供第一个匹配的记录,并在其后停止搜索。
if let sale = Salas.first(where: { $0.id == 307 }) {
print(sale.latitud)
}
答案 1 :(得分:0)
这将映射Salas
并返回latitud
s的数组。
Salas.flatMap { $0.id == 307 ? $0.latitud : nil }
例如
var arrayFiltered = Salas.flatMap { $0.id == 307 ? $0.latitud : nil }
Print(arrayFiltered) -> ["-29.96429300"]
答案 2 :(得分:0)
struct SalasMaster {
let id: Int
let nombre: String
let latitud: String
}
// creating the array
let sala1 = SalasMaster(id: 1, nombre: "Sala1", latitud: "123")
let sala2 = SalasMaster(id: 2, nombre: "Sala2", latitud: "321")
let salas = [sala1, sala2]
let idToFind = 1
let latitudFound = salas
.first { $0.id == idToFind } // returns the object found
.map { $0.latitud } // we transform the object
if let latitudFound = latitudFound {
print(latitudFound) // 123
}
或者如果您希望获得多个您感兴趣的字段,可以使用元组:
let idToFind = 1
let salaFound = salas
.first { $0.id == idToFind } // returns the object found
.map { (latitud: $0.id, nombre: $0.nombre) } // returns a tuple
if let sala = salaFound {
print(sala.latitud) // 123
print(sala.nombre) // Sala1
//print(sala.id) // (latitud: Int, nombre: String) has no member 'id'
}