này đã được cố định trong Swift 4
let data = ["a": 0, "b": 42]
let filtered = data.filter { $0.value > 10 }
print(filtered) // ["b": 42]
Trong Swift 4, một cuốn từ điển lọc trả về một từ điển.
câu trả lời gốc cho Swift 2 và 3
Vấn đề là data
là một cuốn từ điển nhưng kết quả của filter
là một mảng, vì vậy thông báo lỗi nói rằng bạn không thể gán kết quả của cái sau đến cái cũ.
Bạn chỉ có thể tạo ra một biến mới/liên tục cho mảng kết quả của bạn:
let data: [String: String] = [:]
let filtered = data.filter { $0.1 == "Test" }
Đây filtered
là một mảng của các bộ: [(String, String)]
.
Khi lọc, bạn có thể tái tạo một từ điển mới nếu đây là những gì bạn cần:
var newData = [String:String]()
for result in filtered {
newData[result.0] = result.1
}
Nếu bạn quyết định không sử dụng filter
bạn có thể biến đổi từ điển gốc hoặc một bản sao của nó:
var data = ["a":"Test", "b":"nope"]
for (key, value) in data {
if value != "Test" {
data.removeValueForKey(key)
}
}
print(data) // ["a": "Test"]
Lưu ý: trong Swift 3, removeValueForKey
đã được đổi tên thành removeValue(forKey:)
, vì vậy trong ví dụ này nó trở thành data.removeValue(forKey: key)
.
alright cảm ơn bạn :) đó chỉ là ngu ngốc từ táo theo ý kiến của tôi. Khi tôi lọc từ điển, tôi mong đợi từ điển trở lại ... Tôi đã thay đổi mã của mình thành mảng và sử dụng cấu trúc kết hợp để bao gồm cả khóa và giá trị (để tôi không bị buộc phải sử dụng khóa chuỗi) và hơn tôi sử dụng chức năng lọc một lần nữa, vì đây là cách tiếp cận súc tích nhất. – warly
Bất cứ ai cũng biết tại sao Dictionary.filter không trả lại một từ điển? Tôi tò mò. – Tylerc230
@warly xem câu trả lời của Eendje bên dưới. Đó là một câu trả lời khác nhau – Honey