[英]How can I sort a class using an array? - swift 5
我有一個名為“汽車”的課程:
car1 = [name: "ferrari", color: "black", size: "small" ]
car2 = [name: "Lamborghini", color: "orange", size: "small" ]
car3 = [name: "Audi", color: "black", size: "big" ]
car4 = [name: "fiat", color: "yellow", size: "small" ]
car5 = [name: "ferrari", color: "red", size: "medium" ]
並列出了它們:
list = [car1,car2,car3,car4]
現在我想對這個列表進行排序/過濾。
如果我嘗試使用字符串對其進行過濾,則一切正常:
let searchtext = "Audi"
filteredlist = list.filter({ $0.name.lowercased().contains(searchText.lowercased()) })
--> filteredlist = [car3] //result
但我想使用一個數組,這樣我就可以顯示更多結果。 類似於通過多種顏色過濾(類似於“if 語句”中的“或”條件)。
我嘗試過相同的結構(但當然沒有用):
let searchtext = ["black","red"]
filteredlist = list.filter({ $0.color.contains(searchText) })
--> filteredlist = [car1,car3,car5] //expected, got compilation error instead
我有這些錯誤:
Cannot convert value of type 'String.Element' (aka 'Character') to expected argument type 'String'
Instance method 'contains' requires that '[String]' conform to 'StringProtocol'
我可以想到 2 個解決方案(不是理想的解決方案)來解決這個需求:
1 - 創建一個 while/for 函數並為 searchtext 數組的每個元素過濾列表,最后將所有內容統一起來(不推薦,因為我將不得不閱讀列表“n”次)
更新:愚蠢的方式
var i = 0
var listapp: [Item] = []
while i < searchtext.count {
listapp.append(contentsOf: list.filter({ $0.tipo.contains(searchtext[i]) }))
i += 1
}
list = listapp
2 - 使用 'if','or','while' 手動過濾列表,而不是使用 list.filter 函數
反過來說:
let searchtext = ["black","red"]
filteredlist = list.filter({ searchtext.contains($0.color) })
雙contains
應該這樣做:
let searchText = ["black", "red"].map { $0.lowercased() }
filteredlist = list.filter { item in
let color = item.color.lowercased()
return searchText.contains { text in color.contains(text) }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.