在追加新值之前使用逗号的 Swift 数组映射

问题描述 投票:0回答:3

我的 Realm 对象中有以下数据结构

var tags = List<Tag>()
"tags": [
    {
        "tagId": "80069",
        "tagName": "A"
    },
    {
        "tagId": "80070",
        "tagName": "B"
    },
    {
        "tagId": "80071",
        "tagName": "C"
    },
    {
        "tagId": "80073",
        "tagName": "D"
    }
]

所以我想要实现的是,我将所有标签名称映射到我的新数组中

这是我的代码

let realmObject = self.realm.objects(MyDTO.self)
let array = Array(realmOutletList).map{Array($0.tags).map{$0.tagName!}.joined(separator: ",")}

它打印出这个

["A,B,C", "A,C,D", "B,C,D"]

我想要实现的目标是

["A","B","C", "A","C","D", "B","C","D"]

我需要这种数组,因为我要从该数组创建一个 Set,然后与另一个数组进行比较

比较的数组将类似于

["A","B","C", "A","C","D", "B","C","D"]

因为比较的数组和realmObject数组不同,所以我使用的时候总是显示false

let subset = filterSet.isSubset(of: mySet)

有人可以指导我吗?

谢谢

ios arrays swift realm
3个回答
3
投票

让我们逐步解决问题:

考虑一下你有:

let originalArray = ["A,B,C", "A,C,D", "B,C,D"]

首先,我们需要用“,”字符分隔

originalArray
中的每个字符串,所以我们可以这样做:

let modifiedArray = originalArray.map { $0.components(separatedBy: ",") }

我们

map
将每个字符串转换为字符串数组(分离)。

到目前为止,

modifiedArray
的输出将是:

[[“A”、“B”、“C”]、[“A”、“C”、“D”]、[“B”、“C”、“D”]]

这是一个字符串数组。

第二,我们需要溢出

modifiedArray
中的每个字符串数组(改为使用一个简化的字符串数组),所以我们可以这样做:

var final = [String]()
for array in modifiedArray {
    for string in array {
        final.append(string)
    }
}

OR 使用

reduce

let finalArray = modifiedArray.reduce([], +)

因此,

finalArray
将是:

[“A”,“B”,“C”,“A”,“C”,“D”,“B”,“C”,“D”]

这就是想要的结果。


结论

对于完整的一行答案(遵循高阶函数方法):

let originalArray = ["A,B,C", "A,C,D", "B,C,D"]

let desiredArray = originalArray.map { $0.components(separatedBy: ",") }.reduce([], +)
print(desiredArray) // ["A", "B", "C", "A", "C", "D", "B", "C", "D"]

3
投票

嗯,这很简单:

这个

let array = Array(realmOutletList).map{Array($0.tags).map{$0.tagName!}.joined(separator: ",")}

应该是这个

let array = Array(realmOutletList).flatMap{Array($0.tags).map{$0.tagName!}}

仅此而已。你会得到你的

["A","B","C", "A","C","D", "B","C","D"]


0
投票
let array = ["A","B","C"]
let formattedLists = (array.map{String($0)}.joined(separator: ",")) // comma .. if need comma + space try ", "

print(formattedLists) // A,B,C
© www.soinside.com 2019 - 2024. All rights reserved.