在 Swift 中将索引数组转换为字典

Turning an indexed array into a dictionary in Swift

所以我在这里找到了这样做的方法,但我不明白如何实现它。

extension Collection  {
    var indexedDictionary: [Int: Element] {
        return enumerated().reduce(into: [:]) { [=11=][.offset] = .element }
    }
}

所以假设我有一个像

这样的字符串数组
var someArray: [String] = ["String", "String", "String"...etc]

我想被索引,使最终结果成为像

这样的字典

[1: "string", 2: "string":..etc]

使用该方法,我该如何实现?就像我在哪里将 someArray 放入该代码?

let result = someArray.reduce([:]) { (dic, val) -> [Int:String] in
    let index = someArray.index(of: val)
    var mutableDic = dic
    mutableDic[index!] = val
    return mutableDic
}

此分机:

extension Collection  {
    var indexedDictionary: [Int: Element] {
        return enumerated().reduce(into: [:]) { [=10=][.offset] = .element }
    }
}

indexedDictionary 属性 添加到 Swift 中的所有 Collection。数组是 Collection,因此当您将此扩展名添加到顶层的 Swift 源文件时,数组会添加此 属性(不要将其放在另一个 classstructenum)。你只需要将它添加到项目中的一个文件中,然后新的 属性 将在每个文件中都可以访问。

然后,您只需在代码中的任何数组上调用 indexedDictionary,它 return 是类型 [Int : Element]Dictionary,其中 Element 表示类型在您的原始数组中。因此,如果名为 myArray 的数组的类型为 [String],则 myArray.indexedDictionary 将 return 为 [Int : String].[=35= 类型的 Dictionary ]


示例:

let arr1 = ["a", "b", "c"]
let dict1 = arr1.indexedDictionary
print(dict1)

输出:

[2: "c", 0: "a", 1: "b"]

// It works with dictionary literals
let dict2 = [5, 10, 15].indexedDictionary
print(dict2)

输出:

[2: 15, 0: 5, 1: 10]

  let arr3: [Any] = [true, 1.2, "hello", 7]
  print(arr3.indexedDictionary)

输出:

[2: "hello", 0: true, 1: 1.2, 3: 7]

注意:字典是无序的,所以即使顺序不可预测,键到值的映射也是你所期望的。