gpt4 book ai didi

ios - 如何使用映射和过滤器从一维数组生成二维数组?

转载 作者:可可西里 更新时间:2023-10-31 23:59:40 25 4
gpt4 key购买 nike

我今天使用循环获得了所需的输出,但我如何使用 map 和 filter 将此循环与单行表达式交换?

我从一系列国家开始。从这个我使用 map 生成第二个带有初始字母的数组。我现在想使用 map 和 filter 构建一个二维数组,在单独的数组中包含所有具有相同首字母的国家,这样我就可以摆脱我今天使用的循环。

let countries = ["Albania", "Algeria", "Angola", "Bahamas", "Bahrain", "Canada"]

var initials = Set(countries.map { $0.prefix(1) }).sorted()

func countriesByInitial() -> [[String]] {
var result = [[String]]()
for initial in initials {
result.append(countries.filter { $0.prefix(1) == initial })
}
return result
}

最佳答案

你可以通过group > sort > map组合来实现:

let countries = ["Algeria", "Albania", "Belarus", "Bahamas", "Canada"]
let groupedDict = Dictionary(grouping: countries, by: { $0.prefix(1) })
let sortedDict = groupedDict.sorted(by: { $0.key < $1.key })
let arr2D = sortedDict.map({ $0.value })

你可以把它写在一行中:

let arr = (Dictionary(grouping: countries, by: { $0.prefix(1) })).sorted(by: { $0.key < $1.key }).map({ $0.value })

您也可以对数组使用 reduce:

//$0 将是 [[String]]

类型

//$1 将是 String 类型

let arr2D: [[String]] = countries.reduce(into: []) {
let checkChar = $1.first
if let idx = $0.index(where: {$0.first?.first == checkChar }) {
$0[idx].append($1)
} else {
$0.append([$1])
}
}

关于ios - 如何使用映射和过滤器从一维数组生成二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52703209/

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