我有这种类型的字典:
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/