第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將map()應用于Swift中的字典最簡潔的方法是什么?

將map()應用于Swift中的字典最簡潔的方法是什么?

慕尼黑5688855 2019-08-17 15:31:43
將map()應用于Swift中的字典最簡潔的方法是什么?我想在字典中的所有鍵上映射一個函數(shù)。我希望像下面這樣的東西可以工作,但過濾器不能直接應用于字典。實現(xiàn)這一目標的最簡潔方法是什么?在這個例子中,我試圖將每個值遞增1.但這對于示例來說是偶然的 - 主要目的是弄清楚如何將map()應用于字典。var d = ["foo" : 1, "bar" : 2]d.map() {     $0.1 += 1}
查看完整描述

3 回答

?
jeck貓

TA貢獻1909條經(jīng)驗 獲得超7個贊

Swift 4+

好消息!Swift 4包含一種mapValues(_:)方法,該方法使用相同的鍵但不同的值構(gòu)造字典的副本。它還包括一個filter(_:)過載它返回一個Dictionary,以及init(uniqueKeysWithValues:)init(_:uniquingKeysWith:)初始化來創(chuàng)建一個Dictionary從元組的任意序列。這意味著,如果您想要更改鍵和值,您可以這樣說:

let newDict = Dictionary(uniqueKeysWithValues:
    oldDict.map { key, value in (key.uppercased(), value.lowercased()) })

還有用于將字典合并在一起的新API,用缺省元素替換缺省值,對值進行分組(將集合轉(zhuǎn)換為數(shù)組字典,通過將集合映射到某個函數(shù)的結(jié)果來鍵入)等等。

在討論引入這些功能的SE-0165提案時,我多次提出這個Stack Overflow的答案,我認為大量的upvotes有助于證明需求。謝謝你的幫助讓Swift變得更好!


查看完整回答
反對 回復 2019-08-17
?
慕桂英546537

TA貢獻1848條經(jīng)驗 獲得超10個贊

使用Swift 5,您可以使用以下五個代碼段中的一個來解決您的問題。


#1。使用Dictionary mapValues(_:)方法

let dictionary = ["foo": 1, "bar": 2, "baz": 5]let newDictionary = dictionary.mapValues { value in
    return value + 1}//let newDictionary = dictionary.mapValues { $0 + 1 } // also worksprint(newDictionary) // prints: ["baz": 6, "foo": 2, "bar": 3]

#2。使用Dictionary map方法和init(uniqueKeysWithValues:)初始化程序

let dictionary = ["foo": 1, "bar": 2, "baz": 5]let tupleArray = dictionary.map { (key: String, value: Int) in
    return (key, value + 1)}//let tupleArray = dictionary.map { ($0, $1 + 1) } // also workslet newDictionary = Dictionary(uniqueKeysWithValues: tupleArray)print(newDictionary) // prints: ["baz": 6, "foo": 2, "bar": 3]

#3。使用Dictionary reduce(_:_:)方法或reduce(into:_:)方法

let dictionary = ["foo": 1, "bar": 2, "baz": 5]let newDictionary = dictionary.reduce([:]) { (partialResult: [String: Int], tuple: (key: String, value: Int)) in
    var result = partialResult
    result[tuple.key] = tuple.value + 1
    return result}print(newDictionary) // prints: ["baz": 6, "foo": 2, "bar": 3]
let dictionary = ["foo": 1, "bar": 2, "baz": 5]let newDictionary = dictionary.reduce(into: [:]) { (result: inout [String: Int], tuple: (key: String, value: Int)) in
    result[tuple.key] = tuple.value + 1}print(newDictionary) // prints: ["baz": 6, "foo": 2, "bar": 3]

#4。使用Dictionary subscript(_:default:)下標

let dictionary = ["foo": 1, "bar": 2, "baz": 5]var newDictionary = [String: Int]()for (key, value) in dictionary {
    newDictionary[key, default: value] += 1}print(newDictionary) // prints: ["baz": 6, "foo": 2, "bar": 3]

#5。使用Dictionary subscript(_:)下標

let dictionary = ["foo": 1, "bar": 2, "baz": 5]var newDictionary = [String: Int]()for (key, value) in dictionary {
    newDictionary[key] = value + 1}print(newDictionary) // prints: ["baz": 6, "foo": 2, "bar": 3]


查看完整回答
反對 回復 2019-08-17
?
一只名叫tom的貓

TA貢獻1906條經(jīng)驗 獲得超3個贊

雖然這里的大多數(shù)答案都集中在如何映射整個字典(鍵值)上,但問題實際上只是想映射值。這是一個重要的區(qū)別,因為映射值允許您保證相同數(shù)量的條目,而映射鍵和值可能會導致重復鍵。

這是一個擴展名,mapValues允許您只映射值。請注意,它還init使用一系列鍵/值對來擴展字典,這比從數(shù)組初始化更通用:

extension Dictionary {
    init<S: SequenceType where S.Generator.Element == Element>
      (_ seq: S) {
        self.init()
        for (k,v) in seq {
            self[k] = v        }
    }

    func mapValues<T>(transform: Value->T) -> Dictionary<Key,T> {
        return Dictionary<Key,T>(zip(self.keys, self.values.map(transform)))
    }}


查看完整回答
反對 回復 2019-08-17
  • 3 回答
  • 0 關(guān)注
  • 1253 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號