如果在swift中创建了两个数组,如下所示:
var a:[CGFloat] = [1, 2, 3]
var b:[CGFloat] = [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
他们如何合并[1, 2, 3, 4, 5, 6]?
我想转此:
let x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Run Code Online (Sandbox Code Playgroud)
进入这个:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)
非常优雅.
当然,最直接的方式是
var y = [Int]()
x.forEach { y.appendContentsOf($0) }
Run Code Online (Sandbox Code Playgroud)
但这使得生成的数组变得可变,这是不必要的.我不喜欢这样.
我试过用reduce:
let y = x.reduce([Int]()) { (array, ints) -> [Int] in
array.appendContentsOf(ints)
return array
}
Run Code Online (Sandbox Code Playgroud)
但编译器抱怨这array是不可变的,所以我不能调用变异方法appendContentsOf.
因此,我添加了一些东西:
let y = x.reduce([Int]()) { (array, ints) -> [Int] in
var newArr = array
newArr.appendContentsOf(ints)
return newArr
}
Run Code Online (Sandbox Code Playgroud)
这简直太糟糕了.我有一种本能,这不是很好的.
如何比上述方法更加平滑地展平阵列?单线会很好.
我有一个整数数组字典,如下所示:
let numbers = [1: [2, 3], 4: [5, 6, 7], 8: [9]]
我真正想要的是所有值(它们本身就是数组)的单个扁平数组,如下所示:
[2, 3, 5, 6, 7, 9]
现在,我已经能够致电numbers.values.array:
[[2, 3], [5, 6, 7], [9]]
但我正在寻找的是将这一步进一步合并,将它们弄平.
Swift(1.1或1.2)是否为此提供了便利方法?
使用这个堆栈溢出问题,我有以下代码。
let numbers = [1,[2,3]] as [Any]
var flattened = numbers.flatMap { $0 }
print(flattened) // [1, [2, 3]]
Run Code Online (Sandbox Code Playgroud)
取而代之的扁平设定为[1, [2, 3]]我希望它是[1, 2, 3]。
在Swift中最简单/最干净的方法是什么?
我正在和Swift玩耍,但遇到了一些麻烦flatMap。我已经看到了这个 StackOverflow问题,该问题描述了如何使用来展平数组的数组flatMap,但是当我在操场上重现相同的代码时,它并不会展平该数组。如果有人可以提供一些有关此处发生的情况的见解,我将不胜感激。