我想将Range
Int
转换为Set<Int>
这样的
[0..<count]
- &gt; Set[1,2,3..count]
。
答案 0 :(得分:4)
(可数)范围是序列,且Set
有初始化程序
public init<Source : Sequence where Source.Iterator.Element == Element>(_ sequence: Source)
允许直接从序列创建集合:
let count = 10
let range = 0..<count // CountableRange<Int>
let set = Set(range) // Set<Int>
或者只是
let count = 10
let set = Set(0..<count) // Set<Int>
或者
let set = Set(0..<10) // Set<Int>
请注意,还有IndexSet
这是一种专用类型
管理(非负)整数值集:
let indexSet = IndexSet(0..<10)
答案 1 :(得分:0)
在Swift 5中,Set
有一个名为Promisify的初始化程序。 init(_:)
具有以下声明:
init<Source>(_ sequence: Source) where Element == Source.Element, Source : Sequence
从有限的项目序列中创建一个新集合。
下面的Playground示例代码显示了如何使用init(_:)
来将范围转换为集合:
let count: Int = 10
let range: Range<Int> = 0 ..< count
let set: Set<Int> = Set(range)
print(range) // prints: 0..<10
print(set) // prints: [1, 4, 0, 9, 3, 6, 5, 7, 2, 8]
或者,您可以使用以下IndexSet
的以下两个初始化方法之一init(_:)
和init(_:)
将范围转换为IndexSet
实例。
下面的Playground示例代码显示了如何使用init(_:)
或init(integersIn:)
来将范围转换为集合:
import Foundation
let count: Int = 10
let range: Range<Int> = 0 ..< count
let indexSet: IndexSet = IndexSet(range)
//let indexSet: IndexSet = IndexSet(integersIn: range) // also works
print(range) // prints: 0..<10
print(indexSet) // prints: 10 indexes
for range in indexSet.rangeView {
print(range) // prints: 0..<10
}