我知道Set Collection是键值对,而且键不重复。
在下面的例子中,我认为水果是关键。
第一个索引(属于:)是为什么存在的呢?
那么,第二个索引是否存在呢?
我是不是搞错了布景?
var favoriteFruits: Set = ["Banana", "Apple", "Orange", "Orange"]
favoriteFruits.insert("WaterMelon")
print(favoriteFruits)
favoriteFruits.remove("Banana")
print(favoriteFruits)
if favoriteFruits.contains("Tomato") {
print("Tomato is my favorite Fruits")
} else {
print("Tomato is not my favorite Fruits")
}
print(favoriteFruits.firstIndex(of: "Orange"))
如果你能留下评论的话会有很大的帮助。
2条答案
按热度按时间col17t5w1#
如果选中firstIndexOf method's explanition,您将看到定义:
集合符合
Equatable
。您也可以在检查两个集合是否相等的同时测试这个。下面的代码不会给予任何错误。您会问.firstIndex(属于:)是为什么存在的呢?
因此,
Set
集合类型使用firstIndexOf
方法没有障碍如果你要求
why set is equatable
.set使用哈希表来检查里面的元素,那么Set must be hashable
.a对象符合Hashable
也必须是Equatable
bkhjykvo2#
这是
Set<String>
符合Collection<String>
的结果。Collection
协议要求this method:Collection
协议也需要关联的类型Element
和Index
。即使Set
不是index-based,Set
也会声明一个名为Index
的嵌套结构。请在此处查看其实现。对于一个特定的元素,确实不可能有“第二个”索引,因为集合中的元素是唯一的。对于集合中的任何元素,
firstIndex(of:)
和lastIndex(of:)
将返回相同的结果。然而,
Collection
协议并不关心,毕竟,可以接受任何Collection
的函数并不知道它们所处理的是什么类型的集合,例如:因此它们需要指定是第一个、最后一个还是第n个元素的索引,这样它们的代码才能适用于所有类型的集合。如果
Set
没有这些方法,那么Set
就不是Collection
,也就不能传递给这些函数。