簡體   English   中英

如何使用數組對類進行排序? - 快速 5

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM