假设我有一个公共(public)枚举,每个枚举都有多个关联值。我目前将它们存储为:
public enum foo {
case A
case B
case C
case ... //goes on for hundreds of enums
}
为了访问一个值,我使用这样的 switch 语句(在枚举中)进行线性搜索:
func getNumber() -> Int { //multiple functions just like this for each A, B, C...
switch self {
case .A: return 102 //numbers are arbitrary
case .B: return 438
case .C: return 293
case ... //and so on
}
}
func getName() -> String {
switch self {
case .A: return "Apple" //names are arbitrary as well...
case .B: return "Banana"
case .C: return "Cherry"
case ...
}
}
func ...
但是,要访问列表底部的内容,我必须遍历枚举的每个值,这必须在一秒钟内完成多次。我觉得这样效率很低。理想情况下,我希望能够:
存储多个元素,每个元素都有自己的独立值。每个元素都应该有多个与之关联的相似变量(名称、重量、尺寸等),只是每个变量的值不同。
无需遍历 switch 语句即可访问每个枚举。例如,如果用户输入 foo.B.number(),理想情况下它将返回“438”,而无需遍历每个元素。
不可更改(B 的“号码”永远不会被修改,等等)。这些值是最终值。
能够使用字符串访问特定枚举。例如,如果“Apple”与 foo 的“A”关联,则可以调用这样的函数:
func getFoo(s:String) -> foo { ...
getFoo(s:"Apple")//应该返回A
我可以做什么来存储和访问这些?
最佳答案
在 swift 中最有效的方法是使用字典和元组(元组将数据组合在一起,字典是存储大量数据并高效查找数据的好方法)
public enum Foo {
case A, B, C, D, E, F //and on
}
let dictionary: [Foo: (number: Int, name: String)] = [
.A: (102,"Apple")
]
//然后调用值
let favoriteFruitOfA = dictionary[.A].name
但是,如果您有数百个值,您可能想要放弃枚举。枚举非常适合声明离散值的详尽列表,例如北,南,东,西。此外,枚举声明了一个类型,这就是它被大写的原因,这让我觉得你正在尝试使用枚举来声明一个属性而不应该使用它。干杯。
关于swift - 我如何存储数百个枚举以便可以有效地访问它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49432830/