我正在编写一个接口以排序的对象集合。像往常一样,我把它留给用户来指定这些项目如何排序。然而,我目前在提供键值接口(其中,排序键明确与值分离)或仅有值的接口(其中值或者是排序键,或者用户必须处理单独的排序键通过传递一些比较函数)。将分类值抽象为键值
在我看来,键值接口强制用户始终拥有与该值分离的键,即使某些值自然形成了自己的键。它确实带走了用户处理密钥的责任,但是在使用我的API时可能会导致更简单和更清晰的用户代码。只有值的接口允许对他们自己的键进行更紧凑的值表示,但是在有自然键值区分的情况下,强制用户跟踪和处理他们自己的键。
当然有文献支持这两种方法,尽管在我看来(在这方面可能是错误的),旧的文献往往倾向于只采用价值的方法,而较新的文献则倾向于采用键值方法。
我很好奇你在这些情况下的喜好。我们是否已经到了一个通常比另一个更受欢迎的时间点?如果不是,你通常使用什么,为什么?
您已经理解了这个问题,但是如果您推荐的是键值(字典)的仅值(列表)结构,请提供一些推理。 – sooniln 2009-10-15 20:29:49
在我看来,人们可以将字典视为列表的一个(几乎)特殊情况(而我们至少在讨论排序后的集合)。列表将摘要排除在排序关键字之上,让用户以任何方式处理它,而词典则将明确的排序关键字附加到其值列表中。这使列表更通用,尽管可能并不总是如此高效。 – sooniln 2009-10-15 20:52:13
感谢您的详细解答。我倾向于一个价值唯一的实现,但您的意见,加上我自己的更多研究,已经推动我迈向一个关键价值的方法。毕竟,从概念上讲,Set在某些方面可能比Map更高的抽象,你可以从Map实现Set,但反之亦然。 这对我来说更像是一个练习,而不是我需要的东西,但不幸的是,我目前工作的语言(C#)遇到了一些严重的设计缺陷,当涉及到这样的容器时:/ – sooniln 2009-10-15 21:01:10