我有一个Gtk.TreeView与自定义模型(继承自Gtk.TreeModel),我显示〜150K行。我正在使用PyGtk,但它应该没那么重要。在排序的列中优化pygtk/gtk TreeView交互式搜索?
图形用户界面交互是可以的,但是当激活交互式搜索时,它需要永久(每个字符~10秒)。 根据我对Searching a ListStore的理解和测试,交互式搜索会检查ListStore的每一行(内部存储为链接列表)以查找值。
由于我正在搜索排序的列,我想进行二分搜索。
我该怎么做?我是否需要重新编程从头开始的交互式搜索? 罐头TreeModelSort将会有用吗? (我没有得到它的内部管理如何)
如果我推出我自己的搜索用户界面,我不知道如何开始。 草图看起来像这样:
- Disable built-in interactive search
- 创建搜索的用户界面,并将其连接到正确的按键
- 做手工数据的我的自定义表示的二进制搜索(或排序显示行,如果随机访问是可能的)
- 选择正确的匹配。
对于3.从是要行随机存取看来:
一个gtk.TreeModel对象支持一些Python的映射协议,它允许您检索gtk.TreeModelRow对象代表模型中的一排。
它是真正有效的随机访问吗?
我编辑的问题更清晰:在我看来,TreeModel实现随机访问,但我作为底层TreeStore dont感到困惑。 什么是事实? – 2014-11-12 19:13:59
@BastienJacquet请注意,'TreeModel'是接口,'TreeStore'和'ListStore'是它的具体实现,其中你正在使用后者。'ListStore'不是一个链表,它使用'GSequence'实现,它在内部是一个暴露序列API的树。 'GSequence'(因此'ListStore'被设计用于扩展,使得在列表中的任何地方都可以插入'O(log n)',以及'O(log n)'随机访问,这意味着它实际上是*可能的使用'ListStore'实现二分搜索,预期复杂度为'O(log^2 n)'。 – user4815162342 2014-11-13 18:54:38