我正在阅读这样一段代码:
(apply min-key {:1 1, :2 0, :3 1, :4 10000, :5 1} #{:1 :3 :4 :5}) => :3
我不确定为什么会这样:3而不是:1
有人可以为我澄清一下吗?
答案 0 :(得分:3)
如果您查看最小键源,您会看到它将值与
进行比较 (if (< v1 v2) v1 v2)
,这意味着如果它们相等,则需要第二个。因此,对于具有相同值的多个键,它总是会选择最后一个,在您的情况下:3
这种情况正在发生,因为您使用了一组值,其内部顺序与输入不同:
在repl中:
user> #{:1 :3 :4 :5}
#{:4 :1 :5 :3}
所以,按此顺序,:3是检查的最后一个键。
答案 1 :(得分:2)
min-key
会从x
返回一个元素#{:1 :3 :4 :5}
,例如(k x)
是最小的,其中k
是您的地图。与该映射中的:3
关联的值为1,这是最小值。当然,其他键(如:1
和:5
)具有相同的值,但不会比较键,只会比较值。返回哪个返回最小值的键可能取决于任意因素,例如遍历集的内部顺序。