我有一個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