我的 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)
有人可以指导我吗?
谢谢
让我们逐步解决问题:
考虑一下你有:
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"]
嗯,这很简单:
这个
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"]
。
let array = ["A","B","C"]
let formattedLists = (array.map{String($0)}.joined(separator: ",")) // comma .. if need comma + space try ", "
print(formattedLists) // A,B,C