1. ホーム
  2. ios

[解決済み] Swiftでオブジェクトの配列を辞書にマップする

2022-07-28 02:26:43

質問

の配列があります。 Person のオブジェクトの配列があります。

class Person {
   let name:String
   let position:Int
}

となり、その配列は

let myArray = [p1,p1,p3]

をマッピングしたい。 myArray の辞書となるように [position:name] という古典的な解法があります。

var myDictionary =  [Int:String]()

for person in myArray {
    myDictionary[person.position] = person.name
}

関数型アプローチでそれを行うためのSwiftによるエレガントな方法はあるのでしょうか? map , flatMap ... あるいは他のモダンなSwiftスタイル

どのように解決するのですか?

では map はループと同じなので、良い例ではありません。 reduce を使えば、それぞれのオブジェクトを組み合わせて一つの値にすることができます。

let myDictionary = myArray.reduce([Int: String]()) { (dict, person) -> [Int: String] in
    var dict = dict
    dict[person.position] = person.name
    return dict
}

//[2: "b", 3: "c", 1: "a"]

Swift 4以降では、より明確な構文のために、以下の回答を使用してください。