Swift字典如何实现单个键对应多个值?
实现Swift字典一个键对应多个值的方法
嗨,这个问题我之前开发时也碰到过!你现在用的[String: String]是单值字典,每次给同一个键赋值都会直接覆盖掉之前的值,所以最后只能拿到"Chair"。要让一个键能存储多个值,只需要把字典的值类型改成数组就可以解决啦,下面给你详细讲几种实现方式:
1. 基础实现方式
首先把字典定义为值类型是数组的格式:
var temp = [String: [String]]()
接下来添加元素的时候,要先判断对应键的数组是否存在,如果不存在就先初始化一个空数组,再往里面加元素:
// 给"dinningRoom"添加第一个元素"Table" if temp["dinningRoom"] == nil { temp["dinningRoom"] = [] } temp["dinningRoom"]?.append("Table") // 再添加"Chair" temp["dinningRoom"]?.append("Chair")
现在你再访问temp["dinningRoom"],就能拿到包含["Table", "Chair"]的数组啦!
2. 更简洁的写法
用Swift的空合运算符??可以简化上面的判断逻辑,不用写if语句:
// 添加"Table" temp["dinningRoom"] = (temp["dinningRoom"] ?? []) + ["Table"] // 添加"Chair" temp["dinningRoom"] = (temp["dinningRoom"] ?? []) + ["Chair"]
temp["dinningRoom"] ?? []的意思是:如果键对应的值存在就用它,不存在就用空数组,然后把新元素拼进去再赋值回去。
3. 用扩展让操作更便捷
如果经常需要做这种操作,可以给Dictionary写个扩展,封装添加元素的逻辑,用起来更顺手:
extension Dictionary where Value: RangeReplaceableCollection { mutating func append(_ element: Value.Element, forKey key: Key) { // 用default参数自动初始化空数组,然后直接append self[key, default: Value()].append(element) } } // 现在添加元素只需要一行代码: temp.append("Table", forKey: "dinningRoom") temp.append("Chair", forKey: "dinningRoom")
取值方式
当你需要获取某个键下的所有值时,直接访问对应的数组即可,比如:
if let items = temp["dinningRoom"] { for item in items { print(item) // 会依次打印Table和Chair } }
内容的提问来源于stack exchange,提问作者Shadros
相关产品推荐
相关产品推荐

