【问题标题】:Binary operator '!=' cannot be applied to two '[[String]]' operands [duplicate]二元运算符'!='不能应用于两个'[[String]]'操作数[重复]
【发布时间】:2017-08-14 09:30:58
【问题描述】:

我有一个数组,需要过滤掉其中的一个特定数组。但是,在使用以下代码时,我得到了问题“二元运算符'!='不能应用于两个'[[String]]'操作数”。

var arrayOfArrays = [[[String]]]()
var specificArray = [[String]]()

arrayOfArrays = arrayOfArrays.filter{$0 != specificArray}

我认为这曾经像半年前一样工作......

【问题讨论】:

  • specificArray的数据类型是什么?
  • specificArray 是一个由字符串组成的数组,而 arrayOfArrays 更像是一个由数组组成的数组。
  • specificArray 是 Array> 而 arrayOfArrays 是 Array>>
  • 布尔运算符仅适用于 Array 我猜。
  • 看看这个关于比较数组的答案stackoverflow.com/questions/27567736/compare-arrays-in-swift

标签: arrays swift binary-operators


【解决方案1】:

正如 cmets 中所述,Swift Arrays don't conform to Equatable 所以[[T]] != [[T]] 不起作用,因为它要求[T] 是平等的。您可以改用 elementsEqual(_:by:),它允许使用自定义相等函数比较元素,而不是 Equatable:

arrayOfArrays = arrayOfArrays.filter { !$0.elementsEqual(specificArray, by: ==) }

(注意:感谢SE-0143 "Conditional conformances",一旦 Swift 4 发布,就不再需要这种解决方法了。)

【讨论】:

  • 这正是我想要的。我看到我对其他帖子感到困惑的部分,谢谢您的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 1970-01-01
相关资源
最近更新 更多