gpt4 book ai didi

ios - 是否有更实用的方法将数组重新排列成字典

转载 作者:行者123 更新时间:2023-12-01 16:21:00 26 4
gpt4 key购买 nike

我想知道是否有更好的功能将数组重新排列成字典,其中每个键是另一个包含2个项目的数组?

我已经给出了两个示例,但是我仍在学习函数式编程,无法获得更好的解决方案。谢谢你们!

[编辑]

@bcal为此提供了一个很好的解决方案;我认为任何人都可以为其他解决方案做出贡献!

let myObjArray = ["A", "B", "C", "F", "G", "H", "I", "J", "K"]
var myIndexTwoObjArr: [Int: [String]] = [:]

// first way
var index = 0
for item in myObjArray {
if myIndexTwoObjArr[index] == nil {
myIndexTwoObjArr[index] = [item]
}else if myIndexTwoObjArr[index]!.count < 2 {
myIndexTwoObjArr[index]?.append(item)
index += 1
}
}

print("first way")
myIndexTwoObjArr.forEach{print($0)}

// second way
index = 0
myObjArray.forEach { item in
if myIndexTwoObjArr[index] == nil {
myIndexTwoObjArr[index] = [item]
}else if myIndexTwoObjArr[index]!.count < 2 {
myIndexTwoObjArr[index]?.append(item)
index += 1
}
}

print("second way")
myIndexTwoObjArr.forEach{print($0)}

// third way [thanks to bcal answer]
myIndexTwoObjArr = [:]
myIndexTwoObjArr = [Int: [String]](myObjArray.enumerated().map({($0.0/2, [$0.1])}), uniquingKeysWith: +)

print("third way [thanks to bcal answer]")
myIndexTwoObjArr.forEach{print($0)}


结果打印:

result print

最佳答案

Dictionary具有一个接受键/值对的Sequence的初始化程序,以及一个用于解析具有重复键的对的闭包。
https://developer.apple.com/documentation/swift/dictionary/3127161-init

myIndexTwoObjArr = [Int: [String]](
myObjArray.enumerated().map({($0.0/2, [$0.1])}),
uniquingKeysWith: +
)

第一个参数是功能序列...

enumerated将数组的元素转换为 (Int, String)元组序列,其中元组中的第一个值是元素的索引。

map(Int, String)元组转换为 (Int, [String])元组,其中第一个值是索引÷2,第二个值是包含单个 ArrayString
Dictionary初始化程序的第二个参数是将数组与匹配键组合在一起的闭包。

关于ios - 是否有更实用的方法将数组重新排列成字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60105266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com