【问题标题】:Filter core data items based on search text根据搜索文本过滤核心数据项
【发布时间】:2018-04-22 09:48:01
【问题描述】:

我正在尝试根据搜索栏中的文本 (mySearchText) 过滤项目。到目前为止,我得到了:

items = try context.fetch(Item.fetchRequest())
filtered data = items.filter { ($0.myArray?.contains(mySearchText))!}

如果我输入全文例如这有效如果我在搜索栏中输入“Hello”,它将过滤 myArray 中带有 Hello 的项目。

但是,如果我只输入“Hel”,它将不会过滤相同的项目。即使只使用部分搜索词,我如何过滤项目?

我希望filteredData 是具有包含字符串的数组的项目

var filteredData: [Item] = []

例如如果

item 1.myArray = ["cat", "dog", "monkey"] 和

项目 2.myArray = [“马”、“斑马”、“牛”]

mySearchText = "o"

我希望filteredData为item1和item2(第1项中的牛和第2项中的狗都包含“o”)

【问题讨论】:

    标签: arrays swift core-data filter


    【解决方案1】:

    您正在对数组调用 contains(),这意味着您不是在进行字符串匹配,而是在寻找与您的 mySearchText 对象相等的对象,因此您正在寻找的对象等于“Hello”或该数组中的“Hel”。

    可以说,要进行字符串匹配,您需要向下过滤一级。这是我的版本,我假设 myArray 是一个字符串数组

    items = try context.fetch(Item.fetchRequest())
    var filteredData = [Item]()
    for item in items {
       if item.myArray?.filter({$0.contains(mySearchText)}).count > 0 {
         filteredData.append(item)
       }
    }
    

    【讨论】:

    • 对不起,我应该在问题中说得更清楚。我希望filteredData成为具有包含字符串的数组的项目,因此 var filteredData: [Item] = [] 现在更新了问题
    • 我更新了我的答案以反映这一点。 (我是在手机上完成的,如有任何语法或格式错误,请见谅)
    【解决方案2】:

    当我使用下面的代码时它工作正常,也许你应该使用字符串来根据它进行过滤。

        var mySearchText = "a"
        var items = ["Adam", "Ahmad", "abdalla", "abcd", "efj", "hijk"]
        let filtereddata = items.filter { ($0.lowercased().contains(mySearchText))}
    
        print(filtereddata.count)  // 4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 2011-10-05
      • 2014-05-06
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      相关资源
      最近更新 更多