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

时间:2015-02-12 06:31:19

标签: swift set

在Swift 1.2中有一个Set对象,可用于创建静态类型Set。

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

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

var sIndex = mySet.startIndex; var myObject = mySet[sIndex];

但是如何使用某个&#39;索引&#39;?

创建一个SetIndex

3 个答案:

答案 0 :(得分:44)

String类似,您必须advance()

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

ADDED:从Xcode7 beta6 / Swift2.0开始:

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

Swift 3

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

答案 1 :(得分:4)

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

实际上,您可以从Set中构建一个任意有序的结构,然后在此有序结构中的index处选择一个对象。

可能不是最佳的,但很容易实现:

let myIndex = 1
let myObject = Array(mySet)[myIndex]

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

let myRandomObject = mySet.randomElement()

答案 2 :(得分:0)

Set的索引类型不是Int。因此,您无法使用Int下标,即mySet[2]来检索对象。

您将必须使用Set<String>.Index类型的索引

let mySet: Set = ["a", "b", "c", "d"]
var indices = [Set<String>.Index]()
for index in mySet.indices
{
    indices.append(index)
}
let thirdIndex = indices[2]
print(mySet[thirdIndex]) // prints d (for example)

但是,与Array不同,Set不排序。因此,正如@Martin指出的那样,索引2处的对象不一定是“ c”。