gpt4 book ai didi

arrays - 结构的下标数组

转载 作者:行者123 更新时间:2023-11-28 09:33:54 25 4
gpt4 key购买 nike

鉴于我有这样的结构数组:

let array = [Struct(key: "a", value: 1), Struct(key: "b", value:2)]

如何用键下标数组?

array["b"] 会很好,但正如预期的那样,它不起作用。

编辑:我不使用字典的原因是我需要保留项目的顺序。

最佳答案

这是围绕您的解决方案的语法糖,@AdamBardon。

您可以扩展 Array 以允许您直接对其下标。在幕后它只是使用相同的 first(where:)调用:

protocol HasKey {
var key: String { get }
}

struct Struct: HasKey {
var key: String
var value: Int
}

extension Array where Element: HasKey {
subscript(str: String) -> Element? {
return self.first(where: { $0.key == str })
}
}

例子:

let array = [Struct(key: "a", value: 1), Struct(key: "b", value:2)]

if let x = array["a"] {
print(x)
}

输出:

Struct(key: "a", value: 1)

使用 protocol允许您轻松地将此功能扩展到任何 classstruct有一个key: String让他们收养属性(property)HasKey属性:

extension SomeOtherClass: HasKey { }

您也可以在没有 protocol 的情况下完成它通过检查是否 Element == Struct :

extension Array where Element == Struct {
subscript(str: String) -> Element? {
return self.first(where: { $0.key == str })
}
}

关于arrays - 结构的下标数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45187510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com