0
我在一個陣列中的下列對象:夫特:使用字典的濾波器陣列高階函數
let john = ["name": "John", "Age" : "10", "Gender" : "Male", "City" : "SF"]
let peter = ["name" : "peter", "Age" : "12", "Gender" : "Male", "City" : "NY"]
let mary = ["name" : "mary", "Age" : "14", "Gender" : "Female", "City" : "TX"]
let bob = ["name" : "bob", "Age" : "10", "Gender": "Male" , "City" : "FL"]
var objArray = [john, john, peter, john, peter, mary, mary, bob, john, mary, peter, mary]
objArray由(4)約翰,(3)彼得,(4)瑪麗,(1)鮑勃
如果我能得到字典的數組像下面將是理想的:
[["qty": 4, "obj": john],
["qty": 3, "obj": peter],
["qty": 4, "obj": mary],
["qty": 1, "obj": bob]]
我曾嘗試:
var copyOfObjArray = objArray
var newArray = [[:]]
for obj in objArray{
let name = obj["name"]
let age = obj["age"]
print(name)
var i = 0
for copiedObj in copyOfObjArray{
if copiedObj["name"] == name && copiedObj["age"] == age {
i++
}
}
let newDict = ["qty" : i, "obj" : obj]
//I am not sure how to remove all the objects that are similar
let index = copyOfObjArray.indexesOf(obj)
newArray.append(newDict)
}
問題:有沒有更好的方法可以使用高階函數來實現這一點,使其變得簡單?如果是這樣,代碼示例會很好
'讓結果= {cs.map [「qty」:cs.countForObject($ 0),「obj」:$ 0]}'。有點更短:) – Eendje
@Eendje我同意,我會改變它。但我仍然認爲他甚至不需要字典,因爲NSCountedSet持有信息 - 對象和它們的計數。 – matt
這很美!謝謝。 – user1107173