2017-03-06 52 views
-1

我有這樣獲取陣列內部數組中的斯威夫特3

 class Items { 
      private var titre:String? 
      private var project:[Project]! 

    // and getters 
    } 
and class Project { 
    private var auteur:String? 
    public var assign: [Assign]? 
//getters 
} 

和數組聲明這樣var items = [Items]()

數據模型結構等項目數組看起來像這樣< BR我從網絡服務的數據/ >

items = [[["slow",[Project.class],["bad",[Project.class],["news",[Project.class]]] 

現在我想例如我只想用標題標題得到一個緩慢這樣的d表會是這樣[titre:"slow",[project],所以我怎麼能做到這一點通過SWIFT 3,

我試圖讓指數和填充陣列後,用這個指標,但不是爲我工作

var abc = items.index(where: { (item) -> Bool in 
       if item.titre == "slow" { 
        return true 
       } 

        return false 

      })  

print("item",abc) // i get Optional(1), Optional(1), Optional(1) ... 4 time why ? 

但這不爲我工作,如果有人能幫助我做到這一點,並感謝。

+0

我想,你的陣列結構是錯誤的。請先檢查一下。 –

+1

你用'abc'得到的結果和你期望的結果是什麼? –

+0

@NiravD我得到可選(0) – Akram

回答

0

你並不需要找到一個特定元素的索引,然後該指數在填充元素的數組。你可以直接使用filter這個方法。

您在上面提供的數組格式不正確。

var arrays = [["titre":"hight"], 
       ["titre":"bad"], 
       ["titre":"slow"], 
       ["titre":"urgency"]] 

arrays = arrays.filter({ (element) -> Bool in 
    if element["titre"] == "slow" 
    { 
     return true 
    } 
    return false 
}) 

輸出:

arrays現在包含[["titre":"slow"]]

不過,如果你想使用索引的方法,你可以用它喜歡:

let index = arrays.index { (element) -> Bool in 
    if element["titre"] == "slow" 
    { 
     return true 
    } 
    return false 
} 

輸出

index現在2

1

index(where:)將返回可選Int?,因此您可以使用if letguard let來包裝其值。

if let index = items.index(where: { $0.titre == "slow" }) { 
    //access index here 
} 

如果你想簡單地從數組中對象,那麼你可以使用first(where:)

if let obj = items.first(where: { $0.titre == "slow" }) { 
    //access object here 
} 
+0

評論不適合擴展討論;這個談話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/137358/discussion-on-answer-by-nirav-d-get-array-inside-arrays-in-swift-3) 。 –

0

使用過濾器來獲得結果。

var filter = array.filter { (item) -> Bool in 
    if item["titre"] as! String == "slow" { 
     return true 
    } 

    return false 

} 
0

您可以通過兩件事來改善此代碼。

首先緊的標題,並在你的代碼項目的陣列之間的結合能,如果你只是包裹在一個Struct

struct MyStruct 
{ 
    let title: String 
    let projects: [Project] 
} 

兩個那麼你只需要一個簡單的一個維數組抗衡很多更清晰,並且可以使用一點點關閉魔法使一切看起來更性感:

guard let index = array.index(where: {$0.title == "slow"}) else { return } 
print("item", index)