相关文章推荐
知识渊博的柚子  ·  在Swift中展平数组的数组开发者社区·  1 月前    · 
才高八斗的冰棍  ·  Swift - ...·  1 月前    · 
腼腆的八宝粥  ·  [Swift]多维数组的表示和存储:N维数组 ...·  1 月前    · 
留胡子的电影票  ·  python触发点击事件-掘金·  1 年前    · 
想出家的柠檬  ·  非root用户离线安装docker_非roo ...·  1 年前    · 
谦逊的佛珠  ·  Tutorial: Use Azure ...·  2 年前    · 
Code  ›  在Swift中展平数组的数组开发者社区
数组 swift语言 swift数组
https://cloud.tencent.com/developer/ask/sof/96244
知识渊博的柚子
1 月前
首页
学习
活动
专区
圈层
工具
返回腾讯云官网
提问

问 在Swift中展平数组的数组

Stack Overflow用户
提问于 2014-06-28 17:03:00
EN

Swift在Scala、Xtend、Groovy、Ruby和co中有没有对应的 flatten ?

代码语言: javascript
运行
复制
var aofa = [[1,2,3],[4],[5,6,7,8,9]]
aofa.flatten() // shall deliver [1,2,3,4,5,6,7,8,9] 

当然,我可以使用reduce来实现这一点,但这有点糟糕

代码语言: javascript
运行
复制
var flattened = aofa.reduce(Int[]()){
    a,i in var b : Int[] = a
    b.extend(i)
    return b
}
9 84.2K 0 票数 185
EN
swift

回答 9

Stack Overflow用户

发布于 2015-10-01 21:11:20

在Swift标准库中,为符合 Sequence 协议的所有类型(或Swift 3之前的 SequenceType 上的 flatten )实现了 joined 函数,其中包括 Array

代码语言: javascript
运行
复制
let numbers = [[1,2,3],[4],[5,6,7,8,9]]
let flattened = Array(numbers.joined())

在某些情况下,使用 joined() 可能是有益的,因为它返回一个惰性集合,而不是一个新的数组,但在传递给 Array() 初始化程序时,总是可以转换为一个数组,就像上面的例子一样。

票数 33
EN

Stack Overflow用户

发布于 2019-01-22 20:07:00

Swift 4.2

我在下面写了一个简单的数组扩展。可以使用展平包含另一个数组或元素的数组。与joined()方法不同。

代码语言: javascript
运行
复制
public extension Array {
    public func flatten() -> [Element] {
        return Array.flatten(0, self)
    public static func flatten<Element>(_ index: Int, _ toFlat: [Element]) -> [Element] {
        guard index < toFlat.count else { return [] }
        var flatten: [Element] = []
        if let itemArr = toFlat[index] as? [Element] {
            flatten = flatten + itemArr.flatten()
        } else {
            flatten.append(toFlat[index])
        return flatten + Array.flatten(index + 1, toFlat)
}

用法:

代码语言: javascript
运行
复制
let numbers: [Any] = [1, [2, "3"], 4, ["5", 6, 7], "8", [9, 10]]
numbers.flatten()
票数 4
EN

Stack Overflow用户

发布于 2020-01-02 16:53:58

Apple Swift版本5.1.2 (swiftlang-1100.0.278 clang-1100.0.33.9)

目标: x86_64-apple-darwin19.2.0

​

​

代码语言: javascript
运行
复制
let optionalNumbers = [[1, 2, 3, nil], nil, [4], [5, 6, 7, 8, 9]]
print(optionalNumbers.compactMap { $0 }) // [[Optional(1), Optional(2), Optional(3), nil], [Optional(4)], [Optional(5), Optional(6), Optional(7), Optional(8), Optional(9)]]
print(optionalNumbers.compactMap { $0 }.reduce([], +).map { $0 as? Int ?? nil }.compactMap{ $0 }) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(optionalNumbers.compactMap { $0 }.flatMap { $0 }.map { $0 as? Int ?? nil }.compactMap{ $0 }) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(Array(optionalNumbers.compactMap { $0 }.joined()).map { $0 as? Int ?? nil }.compactMap{ $0 }) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
 
推荐文章
知识渊博的柚子  ·  在Swift中展平数组的数组开发者社区
1 月前
才高八斗的冰棍  ·  Swift - 高阶函数介绍(map、flatMap、filter、reduce、 zip) - 懂事长qingzZ
1 月前
腼腆的八宝粥  ·  [Swift]多维数组的表示和存储:N维数组映射到一维数组(一一对应)! - 为敢技术
1 月前
留胡子的电影票  ·  python触发点击事件-掘金
1 年前
想出家的柠檬  ·  非root用户离线安装docker_非root用户安装docker_Anny的blog的博客-CSDN博客
1 年前
谦逊的佛珠  ·  Tutorial: Use Azure Blob Storage with SQL Server - SQL Server | Microsoft Learn
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号