我在 GTK+ 中有一个列表控件(gtk.TreeView
只有一列),启用了“键入时查找”(因此键入任何文本都会打开一个小的搜索字段以搜索列表条目)。现在,如果用户输入一些搜索文本,如“abc”,我应该只搜索以“abc”开头的条目,还是应该搜索在其文本中某处包含“abc”的条目?
(感谢相关人机界面指南的链接)
我在 GTK+ 中有一个列表控件(gtk.TreeView
只有一列),启用了“键入时查找”(因此键入任何文本都会打开一个小的搜索字段以搜索列表条目)。现在,如果用户输入一些搜索文本,如“abc”,我应该只搜索以“abc”开头的条目,还是应该搜索在其文本中某处包含“abc”的条目?
(感谢相关人机界面指南的链接)
正如 Omer Kooheji 所说,正确答案很大程度上取决于列表框包含的内容。但是,基于最小惊讶原则,我建议在条目开始时进行匹配;这是大多数列表框发生的方式(例如,在 Web 中,在 Linux 安装中的时区选择中,等等),所以这是大多数用户所期望的行为。
但是,这是一个通用建议,不知道确切的应用程序。如果您的应用程序是这样的,人们可能不知道确切的开始,但可能知道中间的一些子字符串,那么在任何地方匹配输入显然更有意义。
作为用户,我欣赏“包含”搜索而不是“开始于”。有时您无法准确记住要查找的内容,建议与您的搜索查询相似的内容比将其用作直接过滤器更有帮助。
有时也有多种方法可以列出某些内容,即:
Shining, The - King, Stephen
The Shining - Stephen King
King, Stephen - The Shining
等等。在我看来,输入“Shining”应该会返回任何这些结果。
当然正确的答案取决于它吗?你的主题是什么?
如果您感到懒惰,我会投票支持文本中的任何位置或匹配文本中的任何整个单词(即不必匹配单词的中间)。
尽管在某些情况下,与第一个单词完全匹配是更可取的。
理想情况下,您键入时的查找将对有序字符进行部分匹配,直到达到单词边界。例如(在伪代码中):
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 指南请求):您可能比观看此视频做得更糟