arrays - 快速检索第一个字典值

标签 arrays swift dictionary

我有这种类型的字典:

var dict = [1: ["Value-1-1", "", ""],
            2: ["", "Value-2-2", "Value-2-3"], 
            3: ["Value-3-1", "Value-3-2", ""],
            4: ["Value-4-1", "", "Value-4-3"],
            5: ["", "", "Value-5-3"]]

我需要遍历这个字典,只获取每个键下第一个不为 nil 的值,并将其附加到数组中。

所以,最后,我的数组看起来像:

var array = ["Value-1-1", "Value-2-2", "Value3-1", "Value-4-1", "Value-5-3"]

我在这里读过这个问题 - SO Question但它不包括空值,我想知道是否可以在没有 map 的情况下使用 for in 或 while 循环?

如果有人能提供这种循环的代码示例,将不胜感激。谢谢!

最佳答案

按键对字典进行排序以获得定义明确的顺序, 这给出了一个键/值对数组。 然后使用 compactMap()first(where:) 将每一对映射到 值数组中的第一个非空字符串(如果存在):

let dict = [1: ["Value-1-1", "", ""],
            2: ["", "Value-2-2", "Value-2-3"],
            3: ["Value-3-1", "Value-3-2", ""],
            4: ["Value-4-1", "", "Value-4-3"],
            5: ["", "", "Value-5-3"]]


let array = dict.sorted(by: { $0.key < $1.key })
    .compactMap { $0.value.first(where: { !$0.isEmpty }) }

print(array) // ["Value-1-1", "Value-2-2", "Value-3-1", "Value-4-1", "Value-5-3"]

关于arrays - 快速检索第一个字典值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52278432/

相关文章:

c++ - 无法将文件读入 char 数组(一些指针问题,一如既往)

c# - 我可以用字符串变量(或其他东西)命名数组的每个元素吗?

ios - NsMutable 不是 swift 中 [anyobject] 的子类型

python - 长格式 Pandas 数据框到字典

api - 如何检索维基词典的单词内容?

javascript - 通过展开运算符进行数组解构

php - 在 php 7 中以相似大小的 block 分发分组项目

ios - UISEGMENTEDCONTROL 在段 0 中的单元格单击并移动到段 1 时移动

dictionary - 快速字典嵌套数组操作 - 不能改变字典内的嵌套数组

hadoop - Hadoop映射减少的删除值小于或大于映射器中的值