大佬教程收集整理的这篇文章主要介绍了是否可以将范围作为Swift词典中的键?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
现在我希望1-5映射到值“first”,我希望6-10映射到值“second”
let Dict: [Range<Int> : String]
目标是获得以下结果:
print(Dict[1]) // prints first print(Dict[2]) // prints first print(Dict[3]) // prints first print(Dict[7]) // prints second print(Dict[8]) // prints second print(Dict[9]) // prints second
我目前的做法是简单地将多个键映射到相同的值.但我的词典有时可以有60k的值.所以我想知道一个范围是否可行.
我知道我可以将值转换为类而不是结构,以便多个键可以映射到同一个类对象,但我想知道是否只是创建一个像上面那样工作的字典是可能的吗?
extension CountableClosedRange : Hashable { public var hashValue: Int { return "\(lowerBound) to \(upperBound)".hashValue } } // This feature is called concrete-type extension and requires Swift 3.1 extension Dictionary where Key == CountableClosedRange<Int> { subscript(rawValue rawValue: int) -> Value? { for k in self.keys { if k ~= rawValue { return self[k] } } return nil } } let Dict : [CountableClosedRange<Int>: String] = [ 1...5: "first",6...10: "second" ] print(Dict[rawValue: 1]) print(Dict[rawValue: 2]) print(Dict[rawValue: 3]) print(Dict[rawValue: 7]) print(Dict[rawValue: 8]) print(Dict[rawValue: 9])
但是,如果您实现自己的数据模型,它会更清晰:
struct MyRange { var ranges = [CountableClosedRange<Int>]() var descriptions = [String]() mutaTing func append(range: CountableClosedRange<Int>,description: String) { // You can check for overlapping range here if you want self.ranges.append(rangE) self.descriptions.append(description) } subscript(value: int) -> String? { for (i,rangE) in self.ranges.enumerated() { if range ~= value { return descriptions[i] } } return nil } } var range = MyRange() range.append(range: 1...5,description: "one") range.append(range: 6...10,description: "second") print(range[1]) print(range[2]) print(range[6]) print(range[7]) print(range[100])
以上是大佬教程为你收集整理的是否可以将范围作为Swift词典中的键?全部内容,希望文章能够帮你解决是否可以将范围作为Swift词典中的键?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。