在Set <T>中的索引处获取对象

Wim*_*tra 21 set swift

在Swift 1.2中有一个Set对象,您可以使用它来创建静态类型的Set.

我只是无法找到如何在某个索引处获取对象.它有一个subscript允许您执行以下操作:mySet[setIndex].

这将检索该对象setIndex.但现在我想从某个Int索引中获取一个对象.

subscript

但是如何创建具有特定"索引"的SetIndex?

rin*_*aro 46

类似于offsetBy:,你必须.startIndex来自advancedBy()

let mySet: Set = ["a", "b", "c", "d"]
mySet[mySet.index(mySet.startIndex, offsetBy: 2)] // -> something from the set.
Run Code Online (Sandbox Code Playgroud)

增加:从Xcode7 beta6/Swift2.0开始:

let mySet: Set = ["a", "b", "c", "d"]
mySet[mySet.startIndex.advancedBy(2)] // -> something from the set.
Run Code Online (Sandbox Code Playgroud)

斯威夫特3

let mySet: Set = ["a", "b", "c", "d"]
mySet[advance(mySet.startIndex, 2)] // -> something from the set.
Run Code Online (Sandbox Code Playgroud)

  • 请注意,索引2处的对象不一定是"c".从数组(或数组文字)创建集合不会保留给定元素的顺序. (12认同)

Cœu*_*œur 6

ASet是无序的,因此索引处的对象是一个未定义的行为概念。

在实践中,你可以从 Set 中构建一个任意的有序结构,然后在这个有序结构的索引处选择一个对象。

也许不是最优的,但很容易实现:

let myIndex = 1
let myObject = Array(mySet)[myIndex]
Run Code Online (Sandbox Code Playgroud)

注意:如果你需要一个随机元素,从 Swift 4.2 开始,你会得到一个方便的解决方案:

let myRandomObject = mySet.randomElement()
Run Code Online (Sandbox Code Playgroud)