对于列表控件,应在条目开头或者条目中的任意位置找到"按类型查找"匹配项?

时间:2020-03-06 14:36:36  来源:igfitidea点击:

我在GTK +中有一个列表控件(带有一列的" gtk.TreeView"),并启用了"按键入时查找"功能(因此,键入任何文本都将打开一个小的搜索字段,用于搜索列表项)。现在,如果用户输入诸如" abc"之类的搜索文本,我应该只搜索以" abc"开头的条目,还是应该搜索其文本中某处包含" abc"的条目?

(赞赏相关人机界面指南的链接)

解决方案

作为用户,我很欣赏"包含"搜索而不是"开始于"。有时我们可能不记得要查找的内容,建议与搜索查询相似的内容而不是将其用作直接过滤器会更有用。

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

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

我认为,键入" Shining"应该返回任何这些结果。

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

如果我们感到懒惰,我会投票给文本中的任何地方,或者匹配文本中的整个单词(即不必匹配单词的中间部分)。

尽管在某些情况下,最好与第一个单词完全匹配。

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

var input =  getInput();
    input =~ s/(.)/.*/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+)/.*/g;
return find_items(input); // Assuming this takes a regexp as its input

这样对于input =" Th Shi"

和上面相同的数据库

输出将为" {'The Shining'}`

编辑(解决UI指南要求):我们可能会比观看此视频更糟

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

但是,这是通用建议,但不知道确切的应用程序。如果应用程序使人们可能不知道确切的开始,但可能知道两者之间的一些子字符串,那么显然可以在任何地方匹配输入。