在 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 源文件时,数组会添加此 属性(不要将其放在另一个 class
、struct
或 enum
)。你只需要将它添加到项目中的一个文件中,然后新的 属性 将在每个文件中都可以访问。
然后,您只需在代码中的任何数组上调用 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]
注意:字典是无序的,所以即使顺序不可预测,键到值的映射也是你所期望的。
所以我在这里找到了这样做的方法,但我不明白如何实现它。
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 源文件时,数组会添加此 属性(不要将其放在另一个 class
、struct
或 enum
)。你只需要将它添加到项目中的一个文件中,然后新的 属性 将在每个文件中都可以访问。
然后,您只需在代码中的任何数组上调用 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]
注意:字典是无序的,所以即使顺序不可预测,键到值的映射也是你所期望的。