在Swift中将多个数组的所有值展开

14 浏览
0 Comments

在Swift中将多个数组的所有值展开

我有一个整数数组的字典,如下所示:

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)是否提供了方便的方法来实现这个?

0
0 Comments

问题的出现原因是需要将多个数组的所有元素进行展平操作。解决方法是使用Swift中的几种不同的方法来实现展平操作。

其中一种方法是使用reduce函数,将所有数组的元素合并到一个新的空数组中。代码如下:

numbers.values.array.reduce([], combine: +)

另一种方法是使用flatMap函数,将所有数组的元素展平成一个新的数组。代码如下:

numbers.values.array.flatMap { $0 }

在Swift 1.2版本以及更高版本中,可以使用flatMap函数的简化语法来实现展平操作。代码如下:

flatMap(numbers.values) { $0 }

如果在展平操作之后需要进行映射操作,使用flatMap函数可能是最有用的方法。

需要注意的是,不需要使用array属性来调用flatMap函数,直接传递numbers.values作为参数即可。代码如下:

flatMap(numbers.values) { $0 }

感谢给出语法提示的人。同时,flatMap函数和reduce函数都可以接受numbers.values作为参数,这也是个不错的提示。

以上是解决Swift中展平多个数组的问题的几种方法。根据需要选择其中一种方法即可。

0
0 Comments

在Swift中,有时候需要将多个数组的值合并成一个数组。本文主要讨论了如何将多个数组的值合并成一个数组,并对这个问题进行了一些优化。

问题出现的原因是因为在Swift中,如果我们有一个字典,想要将字典中所有的值合并成一个数组,就需要使用一些特定的函数和方法。

解决方法是使用Swift中的reduce函数和flatMap函数来将多个数组的值合并成一个数组。

首先,我们可以使用numbers.values.array来获取字典中的所有值,并使用reduce函数来将这些值合并成一个数组。具体代码如下:

numbers.values.array.reduce([], combine: +) // [5,6,7,2,3,9]

然而,需要注意的是,由于使用的是字典,无法保证值的顺序,所以我们可以使用sorted函数来对合并后的数组进行排序。具体代码如下:

sorted(numbers.values.array.reduce([], combine: +), <) // [2,3,5,6,7,9]

另外,我们还可以使用Swift 1.2中新增的flatMap函数来简化代码。具体代码如下:

sorted(numbers.values.array.flatMap { $0 }, <)

进一步优化的方法是使用全局的sorted函数,并省略<符号,因为它是默认值。同时,我们还可以使用全局的reduce和flatMap函数,省略array属性。具体代码如下:

sorted(reduce(numbers.values, [], +))

sorted(flatMap(numbers.values) { $0 })

通过以上方法,我们可以简洁地将多个数组的值合并成一个数组,并进行排序。这些方法在Swift中的应用非常广泛,能够提高代码的简洁性和可读性。

0
0 Comments

在Swift中,有一个问题是如何将多个数组的值展平。下面的内容提供了两种可能的解决方法。

第一种解决方法是使用[].join(numbers.values)。这将返回一个数组,其中包含所有数组的值。

第二种解决方法是使用flatMap(sorted(numbers.keys)) { numbers[$0]! }。如果你想要按照排序后的字典键的顺序获取值,可以使用这种方法。它会返回一个按照键的排序顺序展平后的值数组。

尽管有些含糊,但我假设你想要对最终的值数组进行排序,而不是对字典键进行排序。所以可以使用sorted(flatMap(numbers.keys){numbers[$0]!})来实现。不过,我看到你上面的评论,忽略我的猜测。

总之,这里提供了两种解决多个数组值展平的问题的方法。你可以根据自己的需求选择其中一种方法来解决这个问题。

0