Realm-JS:在排序结果列表中查找元素索引的高效方法
Realm-JS: Performant way to find the index of an element in sorted results list
我正在寻找一种高效的方法来在排序的结果列表中查找给定领域对象的索引。
我知道 this 类似的问题,使用 indexOf
回答了这个问题,所以我当前的解决方案如下所示:
const sortedRecords = realm.objects('mySchema').sorted('time', true) // 'time' property is a timestamp
// grab element of interest by id (e.g. 123)
const item = realm.objectForPrimaryKey('mySchema','123')
// find index of that object in my sorted results list
const index = sortedRecords.indexOf(item)
我在这里的基本关注点是更大数据集的性能。领域列表的 indexOf
实现是否为此进行了任何改进,还是与 JavaScript 数组相同?我知道有可能创建 indexed properties,在这种情况下索引 time
属性 会提高性能吗?
注:
在 realm-js api 文档中,indexOf section does not reference to Array.prototype.indexOf 与其他部分一样。这让我很乐观这是一个自己的实现,但没有明确说明。
Realm 查询方法 return 一个 Results
对象,它与 Array
对象完全不同,主要区别是第一个可以随时间改变,即使不调用方法它:向源模式添加 and/or 删除记录会导致对 Results
对象的更改。
Results.indexOf
和 Array.indexOf
之间唯一的共同点是方法的名称。
说的容易也说的简单,比较两种方法的效率没有意义
一般来说,所有 indexOf
实现的一个共同问题是它们需要顺序扫描,并且在最坏的情况下(即未找到的情况)需要进行完整扫描。针对 10 个元素执行的麦芽汁实施 indexOf
对程序性能没有影响,而针对 1M 元素执行的最佳实施 indexOf
会对程序性能产生严重影响。如果可能,最好避免对大量数据使用 indexOf
。
希望对您有所帮助。
我正在寻找一种高效的方法来在排序的结果列表中查找给定领域对象的索引。
我知道 this 类似的问题,使用 indexOf
回答了这个问题,所以我当前的解决方案如下所示:
const sortedRecords = realm.objects('mySchema').sorted('time', true) // 'time' property is a timestamp
// grab element of interest by id (e.g. 123)
const item = realm.objectForPrimaryKey('mySchema','123')
// find index of that object in my sorted results list
const index = sortedRecords.indexOf(item)
我在这里的基本关注点是更大数据集的性能。领域列表的 indexOf
实现是否为此进行了任何改进,还是与 JavaScript 数组相同?我知道有可能创建 indexed properties,在这种情况下索引 time
属性 会提高性能吗?
注: 在 realm-js api 文档中,indexOf section does not reference to Array.prototype.indexOf 与其他部分一样。这让我很乐观这是一个自己的实现,但没有明确说明。
Realm 查询方法 return 一个 Results
对象,它与 Array
对象完全不同,主要区别是第一个可以随时间改变,即使不调用方法它:向源模式添加 and/or 删除记录会导致对 Results
对象的更改。
Results.indexOf
和 Array.indexOf
之间唯一的共同点是方法的名称。
说的容易也说的简单,比较两种方法的效率没有意义
一般来说,所有 indexOf
实现的一个共同问题是它们需要顺序扫描,并且在最坏的情况下(即未找到的情况)需要进行完整扫描。针对 10 个元素执行的麦芽汁实施 indexOf
对程序性能没有影响,而针对 1M 元素执行的最佳实施 indexOf
会对程序性能产生严重影响。如果可能,最好避免对大量数据使用 indexOf
。
希望对您有所帮助。