从两个不同的类型数组中找出共同值

Posted

技术标签:

【中文标题】从两个不同的类型数组中找出共同值【英文标题】:Find out common value from two different Type Array 【发布时间】:2021-11-06 09:51:29 【问题描述】:

我有两个 Array 具有不同的数据类型

假设 Array1 是 String

的 [String] 数组

假设数组 2 是 Struct

的 [Custom Objects] 数组

请找个代码

struct ScanData
    var serialNo : String!
    var intNo : String!
    init(serialNo : String, intNo : String) 
        self.serialNo = serialNo
        self.intNo = intNo
    

var validScannedData : [String] = []
var inValidScannedData : [String] = []
var arrayObj = [ScanData(serialNo: "12220116033", intNo: "SN6AT4.270"),ScanData(serialNo: "12198144025", intNo: "SN6AT4.280"),ScanData(serialNo: "12222383027", intNo: "SN6AT4.130"),ScanData(serialNo: "12198213032", intNo: "SN6AT5.260"),ScanData(serialNo: "", intNo: "")]
//print(arrayObj)
//ScanData(serialNo: "12199690049", intNo: "SN6AT6U100")
var localArray = ["12220116033","12198144025","12222383027","12198213032","12199690049"]
let tempArray = arrayObj.filter  data in
    return data.serialNo != "" || data.intNo != ""

print(tempArray.count)

现在我们想通过匹配 serialNo 键从 localArraytempArray 中获取公共值

最后我想在 validScannedData 对象中有 Array of String 格式

预期输出:

有效数据:["12220116033","12198144025","12222383027","12198213032"]

无效数据:["12199690049"]

我试过了,但它会打印自定义对象数组

let a = tempArray.filter ()  localArray.contains($0.serialNo) 
print(a)

提前致谢

【问题讨论】:

filter 调用之前应用map(/.serialNo) @JoakimDanielson 使用套装更容易/更快。顺便说一句map(\.serialNo) 也许是这样,但我只是想指出 op 与找到解决方案的距离有多近,除了我的错字之外,它需要是 compactMap,arrayObj.compactMap(\.serialNo).filter localArray.contains($0) 【参考方案1】:

使用forEach 迭代您的元素,然后检查并附加到根据数组。

localArray.forEach  number in
    arrayObj.contains(where: $0.serialNo == number) ? validScannedData.append(number) : inValidScannedData.append(number)

print(validScannedData)
print(inValidScannedData)

【讨论】:

以上是关于从两个不同的类型数组中找出共同值的主要内容,如果未能解决你的问题,请参考以下文章

两个不同对象数组中唯一值的计数

找出两数组的不同

比较不同长度的两个文件之间的共同值(Linux)

Python - 从函数返回多个值到不同的数组

如何访问数组类型值并在两个不同的列中设置火花?

LeetCode 2215. 找出两数组的不同