首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从将数组作为值的字典中获取值

从将数组作为值的字典中获取值
EN

Stack Overflow用户
提问于 2018-06-17 02:40:46
回答 3查看 71关注 0票数 0

我有一个字典,其中包含语言作为值和每个语言名称的首字符(A,B,C,...)至于钥匙。

代码语言:javascript
复制
var dictionary = [Character: [Language]]()

我想以数组的形式从字典中取出所有的语言。要做到这一点,我需要

代码语言:javascript
复制
let languages = dictionary.values // Dictionary<Character, [Language]>.Values

这不是数组。我尝试像这样获得数组

代码语言:javascript
复制
let languages = Array(tableViewSource.values) // [[Language]]

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-17 02:45:38

你可以试试

代码语言:javascript
复制
let allLangs = nestedArr.reduce([], +)
票数 2
EN

Stack Overflow用户

发布于 2018-06-17 02:54:12

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

代码语言:javascript
复制
Array(dictionary.values.joined())

真的很管用。(这将创建最终数组,而不会创建任何额外的中间数组。)

示例:

代码语言:javascript
复制
let dictionary: [Character: [String]] = ["E": ["espanol", "english"], "G": ["german", "greek"]]
let langs = Array(dictionary.values.joined())
print(langs) // ["german", "greek", "espanol", "english"]

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

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

它给出了按相应键排序的语言。

票数 1
EN

Stack Overflow用户

发布于 2018-06-17 03:11:41

Martin R'sSh_Khan's回答概述了实现这一点的标准方法(您基本上只想平面化一个数组)。然而,我想展示一种更“手动”的方法:

代码语言:javascript
复制
var langs = [String]()
for lang_list in dictionary.values {
    langs.append(contentsOf: lang_list)
}

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

代码语言:javascript
复制
dictionary.values.flatMap { $0 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50890724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档