一尘不染

如何在Swift中优雅地比较元组?

swift

我有2个不同的元组类型(Double,Double):

let tuple1: (Double, Double) = (1, 2)
let tuple2: (Double, Double) = (3, 4)

我想使用一个简单的if语句比较它们​​的值。就像是:

if (tuple1 == tuple2) {
    // Do stuff
}

这将引发以下错误:

找不到’==’的重载,该重载接受提供的参数

我当前的解决方案是这样的功能:

func compareTuples <T: Equatable> (tuple1: (T, T), tuple2: (T, T)) -> Bool {
    return (tuple1.0 == tuple2.0) && (tuple1.1 == tuple2.1)
}

我已经尝试编写扩展,但是不能使其用于元组。您对此问题是否有更优雅的解决方案?


阅读 190

收藏
2020-07-07

共1个答案

一尘不染

更新资料

正如Martin
R
在评论中指出的那样,最多可以将具有六个组成部分的元组与进行比较==。具有不同组件数或不同组件类型的元组被视为不同类型,因此无法进行比较,但是下面描述的简单情况的代码现在已过时。


试试这个:

func == <T:Equatable> (tuple1:(T,T),tuple2:(T,T)) -> Bool
{
   return (tuple1.0 == tuple2.0) && (tuple1.1 == tuple2.1)
}

与您的完全一样,但是我叫它==。然后像:

(1, 1) == (1, 1)

是真实的

(1, 1) == (1, 2)

是假的

2020-07-07