通过apply了解min-key

时间:2015-10-06 12:44:25

标签: clojure

我正在阅读这样一段代码:

(apply min-key {:1 1, :2 0, :3 1, :4 10000, :5 1} #{:1 :3 :4 :5}) => :3

我不确定为什么会这样:3而不是:1

有人可以为我澄清一下吗?

2 个答案:

答案 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)具有相同的值,但不会比较键,只会比较值。返回哪个返回最小值的键可能取决于任意因素,例如遍历集的内部顺序。