为什么选择Swift Set函数为什么选择firstIndex(属于:)是否应用?

bweufnob  于 2022-12-10  发布在  Swift
关注(0)|答案(2)|浏览(134)

我知道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"))

如果你能留下评论的话会有很大的帮助。

col17t5w

col17t5w1#

如果选中firstIndexOf method's explanition,您将看到定义:

Available when Element conforms to Equatable.

集合符合Equatable。您也可以在检查两个集合是否相等的同时测试这个。下面的代码不会给予任何错误。

if set1 == set2{
  //....
}

您会问.firstIndex(属于:)是为什么存在的呢?
因此,Set集合类型使用firstIndexOf方法没有障碍
如果你要求why set is equatable.set使用哈希表来检查里面的元素,那么Set must be hashable.a对象符合Hashable也必须是Equatable

bkhjykvo

bkhjykvo2#

这是Set<String>符合Collection<String>的结果。Collection协议要求this method

func firstIndex(of element: Self.Element) -> Self.Index?

Collection协议也需要关联的类型ElementIndex。即使Set不是index-basedSet也会声明一个名为Index的嵌套结构。请在此处查看其实现。
对于一个特定的元素,确实不可能有“第二个”索引,因为集合中的元素是唯一的。对于集合中的任何元素,firstIndex(of:)lastIndex(of:)将返回相同的结果。
然而,Collection协议并不关心,毕竟,可以接受任何Collection的函数并不知道它们所处理的是什么类型的集合,例如:

func someGenericFunction<C: Collection>(collection: C) {
    // ...
}

因此它们需要指定是第一个、最后一个还是第n个元素的索引,这样它们的代码才能适用于所有类型的集合。如果Set没有这些方法,那么Set就不是Collection,也就不能传递给这些函数。

相关问题