我有一个字典,其中包含语言作为值和每个语言名称的首字符(A,B,C,...)至于钥匙。
var dictionary = [Character: [Language]]()
我想以数组的形式从字典中取出所有的语言。要做到这一点,我需要
let languages = dictionary.values // Dictionary<Character, [Language]>.Values
这不是数组。我尝试像这样获得数组
let languages = Array(tableViewSource.values) // [[Language]]
这将返回一个数组的数组。如何才能获得一个语言数组?我看到了merge(_:uniquingKeysWith:)
,但我不需要合并字典。
发布于 2018-06-17 02:45:38
你可以试试
let allLangs = nestedArr.reduce([], +)
发布于 2018-06-17 02:54:12
如果您想要单个数组(连接所有字典值),那么
Array(dictionary.values.joined())
真的很管用。(这将创建最终数组,而不会创建任何额外的中间数组。)
示例:
let dictionary: [Character: [String]] = ["E": ["espanol", "english"], "G": ["german", "greek"]]
let langs = Array(dictionary.values.joined())
print(langs) // ["german", "greek", "espanol", "english"]
请注意,字典中键/值对的顺序未指定。另一种选择是
let dictionary: [Character: [String]] = ["E": ["espanol", "english"], "G": ["german", "greek"]]
let langs = dictionary.keys.sorted().flatMap { dictionary[$0]! }
print(langs) // ["espanol", "english", "german", "greek"]
它给出了按相应键排序的语言。
发布于 2018-06-17 03:11:41
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 }
https://stackoverflow.com/questions/50890724
复制相似问题