2014-09-30 77 views
1

天兒真好,從處於斯威夫特數組

我試圖用一個for循環訪問值字典斯威夫特陣列中相同的密鑰的一部分字典訪問值。

例如,

let dictionaryOne = [ 
        "name": "Peter", 
        "age": "42", 
        "location": "Milwaukee"] 

let dictionaryTwo = [ 
        "name": "Paul", 
        "age": "89", 
        "location": "Denver"] 

let arrayOfDictionaries = [dictionaryOne, dictionaryTwo] 

我試圖創建使用函數一個for循環,將輸出包含值用於位置即[「密爾沃基」,「丹佛」]的數組

我查看了其他答案,但我只能找到如何從字典本身直接訪問「位置」的值,如果有許多不同的字典而不是僅僅兩個字典,這會很麻煩。

非常感謝您提供的任何幫助!

回答

0

我看到它的方式,你會填充字符串從上市前的城市一個新的陣列。

var locations = [String]() 

for dictionary in arrayOfDictionaries{ 
    locations.append(dictionary["location"]!) 
} 

println(locations) 
0

有幾種方法可以做到這一點。一種是使用鍵 - 值編碼(KVC):

let locations = (arrayOfDictionaries as NSArray).valueForKey("location") as [String] 
2

可以利用map方法的,其目的是遍歷陣列,並且每個元素轉換成另一種類型:

arrayOfDictionaries.map { (dict: [String : String]) -> String? in 
    return dict["location"] 
} 

傳遞到地圖的封閉接收一個數組元素,並返回轉換後的值 - 在您的情況下,它將檢索並返回location鍵的值。

您還可以使用緊湊的形式:

arrayOfDictionaries.map { $0["location"] } 

注意,此方法返回可選的字符串數組,因爲字典標操作總是返回可選。如果您需要非自選的數組,那麼這是不安全版本:

let x = arrayOfDictionaries.map { $0["location"]! } 

當然,如果對於「位置」鍵不適用於數組元素存在的價值,運行時將引發異常。

更多信息有關mapSwift Standard Template Library

+1

注意,這實際上會創建[字符串?]而不是[字符串] – 2014-09-30 20:20:57

+0

@大衛這是正確的 - 感謝指點出來,錯過了明確的說, – Antonio 2014-09-30 20:22:51