我有这样的课
class FoundItem : NSObject {
var id : String!
var itemName : String!
var itemId : Int!
var foundBy : String!
var timeFound : String!
init(id: String,
itemName: String,
itemId: Int,
foundBy: String,
timeFound: String)
{
self.id = id
self.itemName = itemName
self.itemId = itemId
self.foundBy = foundBy
self.timeFound = timeFound
}
我在我的引用
class MapViewVC: UIViewController, MKMapViewDelegate {
var found = [FoundItem]()
var filterItemName : String()
}
我的
FoundItem
是从firebase查询的我的FoundItem
类的字典中生成的。然后,我从另一个 View Controller (它是itemName
函数上的集合 View )生成的didSelection
字符串。我想使用该字符串,然后使用与我以前的itemName
的itemName
字符串相等的字符串viewController
过滤或搜索数组。然后删除不等于itemName
的字典数组。不仅对象,而且包含非等键,值对的整个数组。我花了好几天的时间,而我一直坚持筛选从类创建的字典数组。我已经看过并尝试过NSPredicates,for-in循环,但是最终发生的一切都是创建一个新数组或bool来查找我的值或键是相等的。这是我编写的当前函数。func filterArrayBySearch() {
if self.filterItemName != nil {
dump(found)
let namePredicate = NSPredicate(format: "itemName like %@", "\(filterItemName)")
let nameFilter = found.filter { namePredicate.evaluate(with: $0) }
var crossRefNames = [String: [FoundItem]]()
for nameItemArr in found {
let listName = nameItem.itemName
let key = listName
if crossRefNames.index(forKey: key!) != nil {
crossRefNames[key!]?.append(nameItemArr)
if !("\(key)" == "\(filterItemName!)") {
print("------------- Success have found [[[[[[ \(key!) ]]]]]] and \(filterItemName!) to be equal!!")
// crossRefNames[key!]?.append(nameItemArr)
} else {
print("!! Could not find if \(key!) and \(filterItemName!) are equal !!")
}
} else {
crossRefNames[key!] = [nameItemArr]
}
}
} else {
print("No Data from Search/FilterVC Controller")
}
}
有人可以帮忙吗?似乎很容易找到该值,然后过滤出不等于
itemName
字符串的字典,但是我总是碰壁。然后自己进入for-in循环:P尝试不同的事情来实现相同的任务。 最佳答案
希望我能理解您的要求。您提到了“字典数组”,但实际上您发布的代码中的任何地方都没有字典数组。
据我所知,您在问如何找到found
等于itemName
属性的filterItemName
数组中的所有条目。
如果是这样,您需要做的只是:let foundItems = found.filter { $0.itemName == filterItemName }
就是这样。
其他一些想法:
如果要搜索filterItemName
中包含itemName
的项目,则可以执行以下操作:let foundItems = found.filter { $0.itemName.contains(filterItemName) }
如果要进行不区分大小写的搜索,也可以使用lowercased()
函数。
您还可以将找到的元素的属性返回到数组中:let foundIds = found.filter { $0.itemName == filterItemName }.map { $0.itemId }
关于ios - 通过字典中键的字符串值快速字典的3个过滤器数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40570716/