如何测试命名元组的Swift数组的相等性

如何测试命名元组的Swift数组的相等性,第1张

概述Swift元组不是Equatable,而作为复合类型,它们不能通过协议扩展来制作Equatable.解决方法( as documented in another answer)是为每个元组元素的==运算符创建重载. 有趣的是,可以为常规元组声明==运算符,并使用它来将元组与命名字段进行比较: func ==<T1: Equatable, T2: Equatable>(lhs: (T1,T2), r Swift元组不是Equatable,而作为复合类型,它们不能通过协议扩展来制作Equatable.解决方法( as documented in another answer)是为每个元组元素的==运算符创建重载.

有趣的是,可以为常规元组声明==运算符,并使用它来将元组与命名字段进行比较:

func ==<T1: Equatable,T2: Equatable>(lhs: (T1,T2),rhs: (T1,T2)) -> Bool {    return lhs.0 == rhs.0 && lhs.1 == rhs.1}var one = ("One",1)let two = ("Two",2)print(one == two) // "false"typealias namedTuple2 = (name: String,value: Int)var namedone: namedTuple2 = (name: "One",value: 1)let namedtwo: namedTuple2 = (name: "Two",value: 2)print(namedone == namedtwo) // "false"print(namedone == one) // "true"

元组数组也需要自定义重载作为整体进行比较:

func ==<T0: Equatable,T1: Equatable>(lhs: [(T0,T1)],rhs: [(T0,T1)]) -> Bool {    if lhs.count != rhs.count {        return false    }    for (index,value) in lhs.enumerate() {        if !(value == rhs[index]) {            return false        }    }    return true}let array12: [(String,Int)] = [one,two]let array3: [Tuple2] = [("Three",3)]print(array12 == array3) // "false"

但是,此运算符不接受命名元组的数组:

let namedarray12: [namedTuple2] = [namedone,namedtwo]let namedarray3: [namedTuple2] = [array3[0]]print(namedarray12 == namedarray3)// error: binary operator '==' cannot be applIEd to two '[namedTuple2]' operands

有没有办法测试命名元组数组的相等性,而不为特定的命名元组声明==的重载?

解决方法 SequenceType.elementsEqual(_,isEquivalent :)方法接受用于比较元素的谓词.相同的==重载适用于命名和未命名的元组.因此,不要尝试将==作为整体应用于数组,而是使用elementsEqual.

func ==<T1: Equatable,T2)) -> Bool {    return lhs.0 == rhs.0 && lhs.1 == rhs.1}let namedarray: [(name: String,value: Int)] = [(name: "One",value: 1),(name: "Two",value: 2)]// namedarray == namedarray12namedarray.elementsEqual(namedarray12,isEquivalent: ==) // true
总结

以上是内存溢出为你收集整理的如何测试命名元组的Swift数组的相等性全部内容,希望文章能够帮你解决如何测试命名元组的Swift数组的相等性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1008593.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存