gpt4 book ai didi

ios - swift 3 通过字典中键的字符串值过滤字典数组

转载 作者:搜寻专家 更新时间:2023-10-30 22:03:41 30 4
gpt4 key购买 nike

我有这样一个类

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 类中生成的字典数组。然后我得到一个 itemName 的字符串,它是从另一个 View Controller 生成的,该 View Controller 是 didSelection 函数的 Collection View 。我想获取该字符串,然后使用与我之前的 viewController 中的 itemName 字符串相同的字符串 itemName 过滤或搜索数组。然后删除不等于 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属性(property)。

如果是这样,您需要做的就是:

让 foundItems = found.filter { $0.itemName == filterItemName }

就是这样。


一些其他想法:

如果你想搜索 itemName 中包含 filterItemName 的项目,你可以这样做:

let foundItems = found.filter { $0.itemName.contains(filterItemName) }

如果您想进行不区分大小写的搜索,您还可以使用 lowercased() 函数。

您还可以将找到的元素的属性返回到数组中:

let foundIds = found.filter { $0.itemName == filterItemName }.map { $0.itemId }

关于ios - swift 3 通过字典中键的字符串值过滤字典数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40570716/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com