2017-02-04 58 views
0

短的問題,我有以下的結構,這是我在「薩拉斯」接收來自過濾器只有一個數據結構

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

所以你會l ike通過id過濾'Salas'或者其他的東西,然後返回'latitud'的列表? – Callam

回答

0

您可以使用first(where:)爲,因爲它會給你第一個匹配的記錄,並停止後,搜索。

if let sale = Salas.first(where: { $0.id == 307 }) { 
    print(sale.latitud) 
} 
+0

它適合你嗎? –

+0

對於id搜索的情況下,它也似乎是一個非常有效的想法:)我也需要它。謝謝! –

+0

那麼,關於我的問題,你是對的,道歉! –

0

這將通過映射和Salas返回latitud秒的陣列。

Salas.flatMap { $0.id == 307 ? $0.latitud : nil } 

例如

var arrayFiltered = Salas.flatMap { $0.id == 307 ? $0.latitud : nil } 

Print(arrayFiltered) -> ["-29.96429300"] 
+0

有趣的解決方案,但一些低效的,因爲它會遍歷甚至成立所需的一個全陣列,理想情況下,一旦需要的項目被發現應停止迭代。 – Wilson

+0

我需要這個!在整個應用程序中,我需要同時製作多個濾鏡,所以我需要瀏覽整個陣列「Salas」。謝謝! –

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' 
} 
+0

本質上與Nirav D的答案很相似,但我可能需要直接用你的代碼保存這個元組:)謝謝! –

+0

沒問題的人! – Wilson

相關問題