Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift tableview中的快速全文搜索_Swift_Search_Filter_Tableview_Swift5 - Fatal编程技术网

Swift tableview中的快速全文搜索

Swift tableview中的快速全文搜索,swift,search,filter,tableview,swift5,Swift,Search,Filter,Tableview,Swift5,我已签入StackOverflow,但未找到任何有效的查询解决方案 struct MyModel{ let title: String let subTitle: String let image: UIImage } 现在我想搜索标题并将其输出,返回mymodel过滤器数组。 假设这是我的标题数组 [ "Swift CollectionView Xcode 11", "Swift UITableView Xcode 11", "Swift UICollectionView Xcode 11"

我已签入StackOverflow,但未找到任何有效的查询解决方案

struct MyModel{
let title: String
let subTitle: String
let image: UIImage
}
现在我想搜索标题并将其输出,返回mymodel过滤器数组。 假设这是我的标题数组

[
"Swift CollectionView Xcode 11",
"Swift UITableView Xcode 11",
"Swift UICollectionView Xcode 11",
"Objective C UITableView Xcode 11",
"Objective C CollectionView Xcode 11",
"Objective C UICollectionView Xcode 11",
]
如果我搜索
“collectionView”
那么,

“Swift UICollectionView代码11”、“Swift CollectionView代码11”-右侧

如果我搜索
“collectionview Objective C”
,那么我需要这个搜索结果,它将为我提供带有过滤器的整个数组

“目标C集合视图代码11”, “目标UIC集合视图代码11”, “Swift CollectionView Xcode 11”, “Swift CollectionView Xcode 11”

因为在搜索中它也包含collectionview和objective c。首先,若它包含整个字符串,那个么结果必须先显示给我,然后再显示另一个

我试过这种方法,但不管用

let stringComponent = searchText.components(separatedBy: " ")
_ = searchText.components(separatedBy: " ").map{ (str) in
            arrTemp += arrVideo.filter { (data) -> Bool in
                if data.title.lowercased().contains(str.lowercased()) && !arrTemp.contains(data){
                    return true
                }
                return false
}
还选中了“预测、排序和筛选”,但不适用于我


请帮帮我!谢谢。

从我所看到的问题是,当您将字符串从空字符串“”中分离出来时,所发生的是关键字的形成

- collectionview
- Objective
- C
并显示所有数据,因为“C”是一个单独的关键字。
我说的所有数据都出现了,这是真的吗?

检查下面的代码,它将根据最佳搜索结果对数组进行排序

  let arr =  [
            "Swift CollectionView Xcode 11",
            "Swift UITableView Xcode 11",
            "Swift UICollectionView Xcode 11",
            "Objective C TableView Xcode 11",
            "Objective C CollectionView Xcode 11",
            "Objective C UICollectionView Xcode 11",
        ]

        //Sort the array and in dictioary according to search result
        let dups = Dictionary(grouping: self.serchedArray(arr: arr, isInsideCheck: true), by: {$0}).sorted { $0.1.count > $1.1.count }

        var resultArr2 : [String] = []
        for (_, value) in dups {
            resultArr2 = resultArr2 + self.serchedArray(arr: value, isInsideCheck: false)
        }

        let dups2 = Dictionary(grouping: resultArr2, by: {$0}).sorted { $0.1.count > $1.1.count }

        //Remove duplicate values from dictionary and map to array
        let finalArray = dups2.map { $0.value[0] }
        print(finalArray)
此函数是为搜索而创建的

   func serchedArray(arr : [String], isInsideCheck:Bool) -> [String] {
        var resultArr : [String] = []
        let searchText = "collectionview Objective C"
        let _ = searchText.components(separatedBy: " ").map { (str) in
            let searchedArr = arr.filter( {
                if $0.lowercased().components(separatedBy: " ").contains(str.lowercased()) {
                    return true
                } else {
                    if isInsideCheck {
                        //Check any word is contained in array's element
                        let words = $0.lowercased().components(separatedBy: " ")
                        for word in words {
                            if word.count > 1 {
                                if word.contains(str){
                                    return true
                                } else if str.contains(word) {
                                    return true
                                }
                            }
                        }
                     }
                    return false
                }
            })
            //Merge the array with previous result
            resultArr = resultArr + searchedArr
        }
        return resultArr
    }
它将返回
Objective C CollectionView Xcode 11
作为finalArray中的第一个元素,因为它匹配所有三个词,即
CollectionView
Objective
C

代码很长,因为我们正在检查数组的每个元素中searchString的每个单词, 我们先逐字核对,然后分类


希望这对你有帮助

你面临的主要问题是排序是否正确???是的排序,但我希望得到问题中提到的结果。现在检查答案是否已编辑…是的,请检查我在你的帖子上添加的评论。谢谢它有时会起作用如果我搜索多次,它也会显示以前的值。你能帮我查一下吗。感谢搜索表视图和第一个单元格,它向我显示collectionview记录?无论何时应用过滤器,首先我移除数组,然后应用代码。就是这样,它不是重复数据。现在它对我来说绝对有效。非常感谢。是的,但它必须给我一份关于收藏的记录,以及这方面的目标。