2

我正在寻找一种在排序结果列表中查找给定领域对象索引的高性能方法。我知道这个类似的问题,这是用 using 回答的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 数组中的相同?我知道有可能创建索引属性time在这种情况下索引属性会提高性能吗?

注意:在 realm-js api 文档中,indexOf 部分不像其他部分那样引用Array.prototype.indexOf。这让我很乐观,它是一个自己的实现,但没有明确说明。

4

1 回答 1

1

领域查询方法返回一个与Results对象完全不同的Array对象,主要区别在于第一个查询方法可以随时间变化,即使没有对其调用方法:向源模式添加和/或删除记录可能会导致对Results对象的更改.

Results.indexOf和之间唯一的共同点Array.indexOf是方法的名称。

曾经说这很容易,也可以说比较两种方法的效率是没有意义的。

一般来说,所有indexOf实现的一个共同问题是它们需要顺序扫描,并且在最坏的情况下(即未找到的情况)需要完全扫描。针对 10 个元素执行的麦芽汁indexOf对程序性能没有影响,而indexOf针对 1M 个元素执行的最佳执行可能对程序性能产生严重影响。如果可能,避免使用indexOf大量数据总是一个好主意。

希望这可以帮助。

于 2020-07-06T23:29:29.523 回答