Swift 字典:将值作为数组获取

18 浏览
0 Comments

Swift 字典:将值作为数组获取

我有一个包含UIColor对象的字典,通过一个枚举值ColorScheme进行哈希:

var colorsForColorScheme: [ColorScheme : UIColor] = ...

我想要能够提取这个字典中包含的所有颜色(值)的数组。我认为我可以使用values属性,就像在迭代字典值时使用的那样(for value in dictionary.values {...}),但是这会返回一个错误:

let colors: [UIColor] = colorsForColorSchemes.values

~~~~~~~~~~~~~~~~~~~~~^~~~~~~

'LazyBidrectionalCollection, UIColor>>'无法转换为'UIColor'

看起来values方法返回的不是一个值的Array,而是一个更抽象的集合类型。有没有一种方法可以在不使用for-in循环提取它们的情况下得到一个包含字典值的Array

0
0 Comments

Swift Dictionary: 获取值作为数组

在Swift中,我们可以使用字典(Dictionary)来存储一组键值对。然而,在某些情况下,我们可能需要将字典中的所有值提取出来,并以数组的形式使用。本文将介绍一个常见的问题,即如何从字典中获取值并将其转换为数组。

问题描述:

假设我们有一个包含颜色方案和对应颜色的字典。我们希望从字典中提取所有颜色,并将其存储在一个数组中以供后续使用。然而,字典本身并没有提供直接将值转换为数组的方法。

解决方法:

为了解决这个问题,我们可以使用map函数和闭包来从字典中获取值并将其转换为数组。具体来说,我们可以使用以下代码来实现:

let colorsForColorScheme = [

"scheme1": "red",

"scheme2": "blue",

"scheme3": "green"

]

let colorArray = colorsForColorScheme.map({$0.value})

在上面的代码中,我们首先定义了一个包含颜色方案和对应颜色的字典colorsForColorScheme。然后,我们使用map函数对字典中的每个键值对进行遍历,并使用闭包将值提取出来。最后,我们将提取出来的值存储在colorArray数组中。

通过执行上述代码,我们将获得一个包含所有颜色的数组colorArray。现在,我们可以使用这个数组进行后续操作,例如打印、遍历或进行其他处理。

在Swift中,字典是一种非常有用的数据结构,可以用来存储键值对。然而,有时我们需要将字典中的值提取出来,并以数组的形式使用。通过使用map函数和闭包,我们可以轻松地将字典中的值转换为数组。这种方法不仅简单高效,而且可以帮助我们更方便地处理字典中的值。

0
0 Comments

问题的出现原因:之前在Swift中,想要将字典的值以数组的形式获取,需要使用map函数,将字典的键值对转换为只包含值的数组。这种写法相对较为复杂,不够直观。

解决方法:从Xcode 9.0开始,可以直接通过字典的values属性来获取值,并且该属性符合Collection协议。通过这种方式,可以更简单地将字典的值转换为数组。如果希望将字典的值以数组的形式使用,可以直接使用Array(dict.values)来实现。

这种新的解决方法更加简洁和易读,大大提高了代码的可读性和可维护性。因此,这种方法受到了广泛的欢迎和推崇。

从Xcode 9.0开始,Swift中提供了更直观和简洁的方式来将字典的值转换为数组。通过直接使用字典的values属性,可以快速地获取字典的值,并将其转换为数组。这种新的解决方法大大提高了代码的可读性和可维护性,受到了开发者们的喜爱和推崇。

0
0 Comments

问题的原因是在Swift 2.0中,Dictionary的values属性返回的是一个LazyMapCollection而不是LazyBidirectionalCollection。由于Array类型知道如何使用这个抽象集合类型进行初始化,因此可以使用Array(colorsForColorSchemes.values)将其转换为数组。

解决方法是使用Array(dictionary.values)这种方式,因为数组类型知道如何从LazyMapCollection进行初始化。需要注意的是值的顺序可能是意外的,即使它们在代码中定义的顺序是有序的。

尽管Swift文档中指出values将按照键值对的顺序出现在集合中,但是实际上键值对的顺序并不总是与代码中定义的顺序相同。在遍历和打印上述字典["BR": "Brazil", "GH": "Ghana", "JP": "Japan"]的值时,尽管"Japan"是最后一个定义的,但它会在中间位置打印出来。

要将Swift Dictionary的values属性转换为数组,可以使用Array(dictionary.values)的方式,并且需要注意值的顺序可能与期望的顺序不同。

0