我有一个字典,其中包含语言作为值以及每个语言名称(A,B,C,...)的初始字符和键。
var dictionary = [Character: [Language]]()
我想以数组的形式从字典中获取所有语言。为此,我做了
let languages = dictionary.values // Dictionary<Character, [Language]>.Values
那不是阵列。我试着像这样得到数组
let languages = Array(tableViewSource.values) // [[Language]]
这将返回一个数组的数组。我如何获得一系列语言?我看到了merge(_:uniquingKeysWith:)
,但我不需要合并字典。
答案 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's和Sh_Khan's答案概述了执行此操作的标准方法(您基本上只想展平数组)。但是,我想展示一种更“手动”的方法:
var langs = [String]()
for lang_list in dictionary.values {
langs.append(contentsOf: lang_list)
}
或者,您可以使用+=
运算符代替.append(contentsOf:)
。更简单的方法是使用flatMap(_:)
:
dictionary.values.flatMap { $0 }