Cor*_*aud 6 arrays dictionary filter ios swift
我有一个这样的课
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
}
Run Code Online (Sandbox Code Playgroud)
我把它引用到我的身上
class MapViewVC: UIViewController, MKMapViewDelegate {
var found = [FoundItem]()
var filterItemName : String()
}
Run Code Online (Sandbox Code Playgroud)
我FoundItem是从我的类中FoundItem的一个字典数组生成的firebase查询.然后我得到一个itemName从另一个视图控制器生成的字符串,该控制器是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")
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?这似乎是一个简单的任务,找到值,然后过滤掉不等于itemName字符串的字典,但我一直在打墙.并且自己遇到for-in循环:P尝试不同的事情来完成同样的任务.
par*_*par 17
我希望我理解你的要求.你提到了一个"字典数组"但你实际上在你发布的代码中没有任何字典数组.
据我所知,你问的是如何找到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 }
IKK*_*KKA 10
使用以下方式对字典数组进行排序
var dict:[[String:AnyObject]] = sortedArray.filter{($0["parentId"] as! String) == "compareId"}
Run Code Online (Sandbox Code Playgroud)
该 过滤器 功能遍历每个项目集合中,并返回一个只包含满足的条件包括项目的集合。
我们可以从这个字典数组中获取单个对象,您可以使用以下代码
var dict = sortedArray.filter{($0["parentId"] as! String) == "compareId"}.first
Run Code Online (Sandbox Code Playgroud)
或者
let dict = sortedArray.filter{ ($0["parentId"] as! String) == "compareId" }.first
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26381 次 |
| 最近记录: |