领域数据库 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 中出现的次数。
假设文本包含像
这样的句子
- 这个世界很美好。这是正确的
- 这辆车很漂亮
所以如果我搜索 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 解决方案。
我有一个对象如下
@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 中出现的次数。
假设文本包含像
这样的句子- 这个世界很美好。这是正确的
- 这辆车很漂亮
所以如果我搜索 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 解决方案。