我的 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"]
因为比较的Array和realmObject的Array不一样,所以用的时候总是显示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: ",") }
我们映射
它以将每个字符串转换为字符串数组(分离)。
到目前为止,modifiedArray
的输出将是:
[["A", "B", "C"], ["A", "C", "D"], ["B", "C", "D"]]
这是一个字符串数组。
其次,我们需要在 modifiedArray
中溢出每个 -string- 数组(取而代之的是一个简化的字符串数组),所以我们可以这样做:
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"]
关于ios - 在添加新值之前用逗号映射 Swift 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49554295/