【问题标题】:Realm DB ios swift. Get number of occurances of a keyword in List领域数据库 ios swift。获取列表中关键字的出现次数
【发布时间】:2021-01-06 09:26:29
【问题描述】:

我有一个对象如下

@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

【问题讨论】:

  • 这将通过过滤器完成,但句子 1. 和 2. 是在不同的对象中还是在同一个对象中?例如`let text = “这个世界非常美丽。这是正确的。这是一辆漂亮的汽车”是一个文本属性中的三个句子。或者您是说 MyArray 对象有一个包含 1 的文本属性。然后是一个单独的带有 2 的 MyArray 属性文本。此外,您是在问如何从 MyObject 的 List 属性中检索它,还是会有很多 MyObjects?跨度>
  • myArray 将是一个包含许多对象的数组。 .我将句子称为不同的对象。就像数组的索引0是这个世界很漂亮。这是正确的数组索引 1 是这是一辆漂亮的汽车。当我使用过滤器时,我得到 2 作为计数。我没有得到 3 个计数

标签: ios realm realm-mobile-platform


【解决方案1】:

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

列表属性定义为like this,我还更改了属性名称以更好地匹配它的内容(不是数组)

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

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

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 执行子字符串搜索。虽然领域过滤非常适合返回对象属性与特定查询匹配的结果对象,但它不适合内部字符串操作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多