栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

嵌套数组上的Swift相等运算符

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

嵌套数组上的Swift相等运算符

更新: 条件一致性已在 Swift 4.1中 实现 特别是:

现在,标准库类型Optional,Array和Dictionary的元素类型符合Equatable时,它们便符合Equatable协议。…

(来自Swift
CHANGELOG)。

现在可以任意嵌套

Equatable
元素数组,
Equatable
并且可以与进行比较
==
。您的密码

var x: [[Simple]] = [[Simple(message: "a")], [Simple(message: "b")]]var y: [[Simple]] = [[Simple(message: "a")], [Simple(message: "b")]]x == y

如果

Simple
为,则在Xpre 9.3中编译
Equatable


(旧答案:)
其原因与为什么未为可选数组定义Equatable相似。如果元素类型为,则可以 数组进行 比较

==``Equatable


/// Returns true if these arrays contain the same elements.public func ==<Element : Equatable>(lhs: [Element], rhs: [Element]) -> Bool

这就是为什么

var a: [Simple] = [Simple(message: "a")]var b: [Simple] = [Simple(message: "a")]a == b // -> true

编译。

但即使是equatable类型

T
Array<T>
不符合
Equatable
协议,比较为什么我不能做阵列符合Equatable?。因此,在

var x: [[Simple]] = [[Simple(message: "a")], [Simple(message: "b")]]var y: [[Simple]] = [[Simple(message: "a")], [Simple(message: "b")]]x == y // -> ERROR! Binary operator '==' cannot be applied to two '[[Simple]]’ operands

x
y
与元素类型阵列
[Simple]
,其不会 符合
Equatable
协议,并且不存在匹配的
==
运算符。

您可以

==
为简单的嵌套数组定义通用运算符,如下所示:

func ==<Element : Equatable> (lhs: [[Element]], rhs: [[Element]]) -> Bool {    return lhs.count == rhs.count && !zip(lhs, rhs).contains {$0 != $1 }}

或更简单(如@kennytm所建议):

func ==<Element : Equatable> (lhs: [[Element]], rhs: [[Element]]) -> Bool {    return lhs.elementsEqual(rhs, by: ==)}

这样可以进行

x == y
编译并按预期工作。目前,似乎没有办法
==
在任意嵌套的数组上定义运算符。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/633497.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号