clojure 中的文字哈希集
literal hash set in clojure
每当我在 Clojure 中使用文字符号定义哈希集时,它都会像这样打乱周围的值:
user=> #{1 2 4 6 5}
它返回了这个:
#{1 4 6 2 5}
但是当我把
user=> #{1 4 6 2 5}
它返回:
user=> #{1 4 6 2 5}
这背后的逻辑是什么?
根据定义,集合是无序的。因此,作为接口问题,顺序是任意的。但是,哈希集无疑会将其成员存储在某种哈希 table 中。因此,枚举哈希集成员的自然方法是迭代内部哈希 table。因此,生成元素的顺序将取决于元素的哈希值,以及这些值如何映射到基础哈希 table.
这就是为什么 "ordering" 的元素看起来是随机的,但是重复 table.
每当我在 Clojure 中使用文字符号定义哈希集时,它都会像这样打乱周围的值:
user=> #{1 2 4 6 5}
它返回了这个:
#{1 4 6 2 5}
但是当我把
user=> #{1 4 6 2 5}
它返回:
user=> #{1 4 6 2 5}
这背后的逻辑是什么?
根据定义,集合是无序的。因此,作为接口问题,顺序是任意的。但是,哈希集无疑会将其成员存储在某种哈希 table 中。因此,枚举哈希集成员的自然方法是迭代内部哈希 table。因此,生成元素的顺序将取决于元素的哈希值,以及这些值如何映射到基础哈希 table.
这就是为什么 "ordering" 的元素看起来是随机的,但是重复 table.