代码之家  ›  专栏  ›  技术社区  ›  sigint

设计自动完成系统以选择聚合类型的实例

  •  0
  • sigint  · 技术社区  · 15 年前

    聚合类型T由4个字符串组成:T=c1 c2 c3 c4

    c1、c2、c4中的每一个都可以有许多唯一的值:

    • c1可能具有多个唯一值c1.1、c1.2、c1.3等。。。c1.n,其中n可以相当高,大约30000。
    • c2的唯一值少得多,不超过5,即n<5.
    • 对于c3和c4,n是不可预测的,但通常为10<n<100

        t1 = c1.1 c2.1 c3.1 c4.1
        t2 = c1.2 c2.1 c3.2 c4.2
        t3 = c1.3 c2.2 c3.2 c4.3
        ...
        tN = c1.n c2.n c3.n c4.n
    

    目标是允许用户选择一个T类型的有效实例。目前(C#Winforms.NET 2.0)UI显示了4个自动完成下拉列表,每个下拉列表中的c1 c2 c4具有唯一值。一旦选择了一个有效的实例,它就作为输入被馈送到外部系统。当前用户界面的优点是,它能够快速生成(考虑到这是一个v1.0版本),而且速度相当快——Winforms的标准自动完成下拉列表似乎没有30k唯一项的问题,用户可以快速选择一组四个值。

    价值组合 他们选择了与现有有效对象匹配的对象。对于有经验的用户来说,这绝不是问题;然而,新用户不断地选择c1 c2 c3 c4的值,这实际上不会产生类型t的有效实例。

    我的问题是:有没有其他方法可以构建一个输入T的UI,这样用户就可以享受到autocomplete的好处(我真的想避免使用picklist样式的界面,它们输入数据的速度要慢得多),同时允许新用户选择有效的值组合?

    虽然最初的实现是基于.NET的,但我很乐意听到其他平台的解决方案。我的问题实际上是设计一个更高效的UI,而不是特定的平台。

    编辑以澄清:

    2 回复  |  直到 15 年前
        1
  •  1
  •   pgras    15 年前

    我的答案与如何实现GUI没有直接关系,但您可以将所有有效的组合t1->总氮 patricia trie 并用它来建立 autocompletion as you type .

        2
  •  0
  •   Harald Scheirich    15 年前

    当前界面的快速自适应是将所有选择列表约束为仅允许的元素。即,一旦用户输入了一个项目,例如c1.1,则应仅允许用户选择与c1.1一起出现的其他三个输入中的元素。

    除此之外,我将防止用户只留下一半完成的字段,并且仅在用户成功完成输入时更新依赖列表。您可以使用组合框、文本框本身或与列表组合的文本框来实现这一点。当条目很少时,列表框或组合框可能会加快拾取速度。

    你似乎有一个算法来确定什么组合是允许的,上面提到的patrica trie也有可能