Swift - 二元运算符==不能应用于两个[[Double]]操作数

时间:2017-03-13 11:02:26

标签: swift

我写了一个像这样的litle swift函数:

func compareTest(values: [[Double]]) {
    if(values == [[1.0,2.0]]) {
         // some code   
    }
}

但是当我尝试编译时,我在比较中得到一个错误:

  

二元运算符==不能应用于两个[[Double]]操作数。

我在这里搜索问题。大多数答案是错误消息具有误导性,人们使用了错误的类型(Example Question)。

有人帮助我,我写的类型不正确吗?

2 个答案:

答案 0 :(得分:3)

在这种情况下,没有任何误导。

通常,var epsilon = 0.00000001; if(fabs(v1-v2)< epsilon){ // values are considered equal } 运算符是为==项定义的。这允许将两个Equatable值相互比较,例如, Double

然后我们在1.0 == 1.0项的数组上定义了一个特定的==运算符:

Equatable

这意味着您可以将任何数组与可等项目进行比较。但是,数组本身不是 public func ==<Element : Equatable>(lhs: [Element], rhs: [Element]) -> Bool

没有为嵌套数组定义此类运算符。

您必须定义:

Equatable

答案 1 :(得分:-2)

我不熟悉Swift,但作为任何语言的一般规则,不应使用相等运算符来比较双值。相反,如果两个双值的绝对算术差小于epsilon

,则应认为它们相等
tcp::resolver resolver(io_service);
tcp::resolver::query query(boost::asio::ip::host_name(),"");
tcp::resolver::iterator it=resolver.resolve(query);

while(it!=tcp::resolver::iterator())
{
    boost::asio::ip::address addr=(it++)->endpoint().address();

    std::cout<<addr.to_string()<<std::endl;
}