在Swift 1.2中有一个Set对象,可用于创建静态类型Set。
我只是无法找到如何在特定索引处获取对象。它有一个subscript
,允许您执行以下操作:mySet[setIndex]
。
这将检索setIndex
处的对象。但现在我想从某个Int
索引中获取一个对象。
var sIndex = mySet.startIndex;
var myObject = mySet[sIndex];
但是如何使用某个'索引'?
创建一个SetIndex答案 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”。