gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:24:56 24 4
gpt4 key购买 nike

我有一个这样的类(class)

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 Controller 是 didSelection 函数上的 Collection View 。我想获取该字符串,然后使用字符串 itemName 过滤或搜索数组,该字符串与我之前的 viewController 中的 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 的所有条目属性。

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

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

就是这样。

<小时/>

其他一些想法:

如果您想搜索 itemName 中包含 filterItemName 的项目,您可以执行以下操作:

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

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

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

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

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

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