gpt4 book ai didi

arrays - 合并类数组中的数组

转载 作者:搜寻专家 更新时间:2023-10-31 08:25:12 25 4
gpt4 key购买 nike

下面的类里面有一些变量。

class Person {
var age: Int = 4
var items = [String]()
}

var allPeople = [Person]()
var allItems = [String]()

假设我们为类创建了初始值设定项并且 allPeople 中有 n 元素,我想将每个对象的所有项目合并到一个新数组中

当我尝试访问 allPeople 的每个索引并从那里获取 items 变量并将其附加到 allItems 时,问题就来了。但是我需要指定一个根据元素总数变化的数字。我最初的尝试是使用 for 循环。同样使用 allPeople[allPeople.count - n],类似于此。

最佳答案

解决方案1(这是最快捷的方式):

//if you want to keep adding to the old array
allItems += allPeople.flatMap{$0.items}

//if you want to add into a new array
let newArray = allItems + allPeople.flatMap{$0.items}

// Using 'map' won't work:
allItems = allItems + allPeople.map{$0.items} //error: binary operator '+' cannot be applied to operands of type '[String]' and '[[String]]'

上面的代码不起作用,因为我们将 [String]] 添加到 [String]+ 不知道如何处理,阅读:

let john = Person()
john.items = ["a", "b", "c"]

let jane = Person()
jane.items = ["d", "e", "f"]

allPeople.append(john)
allPeople.append(jane)

print(allPeople.map{$0.items}) // [["a", "b", "c"], ["d", "e", "f"]] <-- [[String]]
// and obviously can't be added to [String]

它正在打印数组中的数组。所以我们需要再做一步。

let mapped = allPeople.map{$0.items}

print(Array(mapped.joined())) // ["a", "b", "c", "d", "e", "f"]

所以如果我们想使用map,我们也应该使用joined

solution2(不是很敏捷,但我只是想解释一下 flatMap 基本上是一个 join + map)

let newJoinedMappedArray = allItems + Array(allPeople.map($0.items).joined())

关于arrays - 合并类数组中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40958429/

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