获取 Set<T> 中索引处的对象
Get object at index in Set<T>
在 Swift 1.2 中有一个 Set 对象,您可以使用它来创建静态类型的 Set。
我找不到如何获取某个索引处的对象。它有一个 subscript
允许您执行以下操作:mySet[setIndex]
.
这会检索 setIndex
处的对象。但是现在我想从某个Int
索引中获取一个对象。
var myObject = mySet[sIndex];
但是如何创建具有特定 'index' 的 SetIndex?
Swift 3 及更高版本
您可以 offsetBy:
来自 .startIndex
:
let mySet: Set = ["a", "b", "c", "d"]
mySet[mySet.index(mySet.startIndex, offsetBy: 2)] // -> something from the set.
Swift 2(过时)
您可以 advancedBy()
来自 .startIndex
:
let mySet: Set = ["a", "b", "c", "d"]
mySet[mySet.startIndex.advancedBy(2)] // -> something from the set.
Swift 1.x(过时)
类似于String
,你必须advance()
从.startIndex
:
let mySet: Set = ["a", "b", "c", "d"]
mySet[advance(mySet.startIndex, 2)] // -> something from the set.
一个Set
是无序的,所以索引处的对象是一个未定义的行为概念。
实际上,您可以从 Set 中构建任意有序结构,然后在该有序结构中的索引处选择一个对象。
可能不是最优的,但很容易实现:
let myIndex = 1
let myObject = Array(mySet)[myIndex]
注意:如果你需要一个随机元素,从Swift 4.2开始你会得到一个方便的解决方案:
let myRandomObject = mySet.randomElement()
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".
在 Swift 1.2 中有一个 Set 对象,您可以使用它来创建静态类型的 Set。
我找不到如何获取某个索引处的对象。它有一个 subscript
允许您执行以下操作:mySet[setIndex]
.
这会检索 setIndex
处的对象。但是现在我想从某个Int
索引中获取一个对象。
var myObject = mySet[sIndex];
但是如何创建具有特定 'index' 的 SetIndex?
Swift 3 及更高版本
您可以 offsetBy:
来自 .startIndex
:
let mySet: Set = ["a", "b", "c", "d"]
mySet[mySet.index(mySet.startIndex, offsetBy: 2)] // -> something from the set.
Swift 2(过时)
您可以 advancedBy()
来自 .startIndex
:
let mySet: Set = ["a", "b", "c", "d"]
mySet[mySet.startIndex.advancedBy(2)] // -> something from the set.
Swift 1.x(过时)
类似于String
,你必须advance()
从.startIndex
:
let mySet: Set = ["a", "b", "c", "d"]
mySet[advance(mySet.startIndex, 2)] // -> something from the set.
一个Set
是无序的,所以索引处的对象是一个未定义的行为概念。
实际上,您可以从 Set 中构建任意有序结构,然后在该有序结构中的索引处选择一个对象。
可能不是最优的,但很容易实现:
let myIndex = 1
let myObject = Array(mySet)[myIndex]
注意:如果你需要一个随机元素,从Swift 4.2开始你会得到一个方便的解决方案:
let myRandomObject = mySet.randomElement()
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".