0

我在 GTK+ 中有一个列表控件(gtk.TreeView只有一列),启用了“键入时查找”(因此键入任何文本都会打开一个小的搜索字段以搜索列表条目)。现在,如果用户输入一些搜索文本,如“abc”,我应该只搜索以“abc”开头的条目,还是应该搜索在其文本中某处包含“abc”的条目?

(感谢相关人机界面指南的链接)

4

4 回答 4

1

正如 Omer Kooheji 所说,正确答案很大程度上取决于列表框包含的内容。但是,基于最小惊讶原则,我建议在条目开始时进行匹配;这是大多数列表框发生的方式(例如,在 Web 中,在 Linux 安装中的时区选择中,等等),所以这是大多数用户所期望的行为。

但是,这是一个通用建议,不知道确切的应用程序。如果您的应用程序是这样的,人们可能不知道确切的开始,但可能知道中间的一些子字符串,那么在任何地方匹配输入显然更有意义。

于 2008-10-08T17:30:03.963 回答
0

作为用户,我欣赏“包含”搜索而不是“开始于”。有时您无法准确记住要查找的内容,建议与您的搜索查询相似的内容比将其用作直接过滤器更有帮助。

有时也有多种方法可以列出某些内容,即:

Shining, The - King, Stephen
The Shining - Stephen King
King, Stephen - The Shining

等等。在我看来,输入“Shining”应该会返回任何这些结果。

于 2008-09-23T16:48:22.353 回答
0

当然正确的答案取决于它吗?你的主题是什么?

如果您感到懒惰,我会投票支持文本中的任何位置或匹配文本中的任何整个单词(即不必匹配单词的中间)。

尽管在某些情况下,与第一个单词完全匹配是更可取的。

于 2008-09-23T16:49:00.340 回答
0

理想情况下,您键入时的查找将对有序字符进行部分匹配,直到达到单词边界。例如(在伪代码中):

var input =  getInput();
    input =~ s/(.)/$1.*/g;
return find_items(input); // Assuming this takes a regexp as its input

这意味着对于input = "Shing"

和一个包含{..., Sine, Shining, 'The Shining', ...}

输出将是{Shining, 'The Shining'}

当达到单词边界时,匹配应该改变以匹配连续的单词部分。大致:

var input =  getInput();
    input =~ s/(\w+)/$1.*/g;
return find_items(input); // Assuming this takes a regexp as its input

这样对于input = "Th Shi"

和上面一样的数据库

输出将是{'The Shining'}

编辑(解决 UI 指南请求):您可能比观看此视频做得更糟

于 2008-09-23T18:39:36.220 回答