gpt4 book ai didi

scala - Set 的头和尾是否保证互斥?

转载 作者:行者123 更新时间:2023-12-02 10:01:59 25 4
gpt4 key购买 nike

documentation表示 Set.head 返回“第一个”项目,而 .tail 返回“除第一个之外的所有项目”。*因为 Set 不返回“确实没有“第一个”项目,文档警告说,如果没有有序类型,您可能会在不同的运行中得到不同的结果。但你能保证尾部不会包含头部吗?

我问的原因是我想知道是否可以像这样递归 Set :

def recurse(itemsToExamine: Set[Item], acc: Result): Result =
if (itemsToExamine.isEmpty) acc
else {
val item = itemsToExamine.head
recurse(
item.spawnMoreItems ++ itemsToExamine.tail,
acc.updatedFor(item))
}

如果这是合法的,那么它肯定比从 Set 转换为 Seq 来回转换以便在每次递归时分离头部和尾部更好。

<小时/>*实际上,它说“选择第一个项目”和“选择除第一个项目之外的所有项目”。我认为“选择”只是一个糟糕的词选择。如果有理由说“选择”而不是“返回”,请告诉我。

最佳答案

我对此不是 100% 确定,因为我没有过多地研究实现,但是对于任何 HashSet ,都有一个基于 hashCode 的隐式排序> (Int 类型)已存在于 Set 中的值。

这意味着对于任何 Set 实例,对 headtail 的调用将遵循该顺序,因此不会相同元素。更重要的是,对给定 Set 实例的元素的连续迭代应该以相同的顺序生成元素,因为 Set 是不可变的。

要点是,虽然顺序未知,但任何实例都有一个顺序,一旦您向 Set 添加(可变或不可变)新元素,顺序可能会发生变化。

关于scala - Set 的头和尾是否保证互斥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24459336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com