领域数据库 ios swift。获取列表中关键字的出现次数

Realm DB ios swift. Get number of occurances of a keyword in List

我有一个对象如下

@objcMembers class MyObject: Object {
    dynamic var name: String = ""
    dynamic var myArray = List<MyArray>()
}

class MyArray: Object {
    @objc dynamic var number = 0
    @objc dynamic var text = ""
}

如何获取关键字在 text 中出现的次数。

假设文本包含像

这样的句子
  1. 这个世界很美好。这是正确的
  2. 这辆车很漂亮

所以如果我搜索 This,我应该得到 3。 如果我搜索 beautiful,我应该得到 2

首先要做的就是修改代码,使其更具可读性。

列表属性已定义 like this,我还更改了 属性 名称以更好地匹配其本身(不是数组)

class MyObject: Object {
    @objc dynamic var name: String = ""
    let textList = List<TextClass>() //fixed definition
}

当我们这样做的时候,让我们用更合适的 class 名称更新存储在该列表中的对象

class TextClass: Object {
    @objc dynamic var number = 0
    @objc dynamic var text = ""
}

然后是读取所有 MyObject 对象的代码,遍历 textList 属性 并计算给定单词的总出现次数。

let myObjectResults = realm.objects(MyObject.self)

let wordToFind = "This" //the word to find
for obj in myObjectResults {
    var count = 0
    let theList = obj.textList
    for textObj in theList {
        let wordCount = textObj.text.lowercased().components(separatedBy: wordToFind.lowercased()).count - 1
        count += wordCount
    }
    print("object: \(obj.name) had: \(count) occuranced of string: \(wordToFind)")
}

和搜索单词 'This'

时的结果
object: some object had: 3 occurrences of string: This

当搜索单词 Beautiful 时,输出结果如下

object: some object had: 2 occurrences of string: Beautiful

我们在这种情况下使用迭代的原因是因为我们实际上是在执行领域 属性 text 的子字符串搜索。虽然 Realm 过滤非常擅长返回对象 属性(s) 与特定查询匹配的结果对象,但它在内部字符串操作方面并不出色。

可能还有一个 NSPredicate 解决方案。