从具有数组值的字典中获取值

时间:2018-06-16 18:40:46

标签: swift

我有一个字典,其中包含语言作为值以及每个语言名称(A,B,C,...)的初始字符和键。

var dictionary = [Character: [Language]]()

我想以数组的形式从字典中获取所有语言。为此,我做了

let languages = dictionary.values // Dictionary<Character, [Language]>.Values

那不是阵列。我试着像这样得到数组

let languages = Array(tableViewSource.values) // [[Language]]

这将返回一个数组的数组。我如何获得一系列语言?我看到了merge(_:uniquingKeysWith:),但我不需要合并字典。

3 个答案:

答案 0 :(得分:2)

你可以尝试

let allLangs = nestedArr.reduce([], +)

答案 1 :(得分:1)

如果你想要一个数组(连接所有字典值),那么

let dictionary: [Character: [String]] = ["E": ["espanol", "english"], "G": ["german", "greek"]]
let langs = dictionary.keys.sorted().flatMap { dictionary[$0]! }
print(langs) // ["espanol", "english", "german", "greek"]

诀窍。 (这将创建最终数组,而不创建任何其他中间数组。)

示例:

#include <mpd/client.h>

请注意,未指定字典中键/值对的顺序。 另一种选择是

mpd_send_add()

,它提供按相应键排序的语言。

答案 2 :(得分:1)

Martin R'sSh_Khan's答案概述了执行此操作的标准方法(您基本上只想展平数组)。但是,我想展示一种更“手动”的方法:

var langs = [String]()
for lang_list in dictionary.values {
    langs.append(contentsOf: lang_list)
}

或者,您可以使用+=运算符代替.append(contentsOf:)。更简单的方法是使用flatMap(_:)

dictionary.values.flatMap { $0 }