【问题标题】:Binary operator '+' cannot be applied to two 'Set<String>' operands Error二元运算符“+”不能应用于两个“Set<String>”操作数错误
【发布时间】:2018-04-26 08:18:52
【问题描述】:

我有 2 个数组,我想在将它们转换为集合后合并它们,这是我的代码:

var before = Array(Set(beforevalues))
var first = Array(Set(myvalues))


let save1 = first{ ($0.rangeOfString("today") != nil) }
let save2 = Set(save1)
var mynewarray = Set(save2)

let merge = Array(Set(before + mynewarray)) // THIS LINE ERROR

但它给出了:

二元运算符 '+' 不能应用于两个 'Set' 操作数

我该如何解决?

【问题讨论】:

  • 那是因为集合没有+ 运算符...你会在developer.apple.com/documentation/swift/set 上找到你需要的一切(提示:这是一个“联合”)
  • @MartinR 是的,我知道,但我想合并?怎么样?
  • 该错误似乎具有误导性。这是类型不匹配:beforeArraymynewarraySet。可能Array(Set(before + save1)) 有效。

标签: arrays swift string set


【解决方案1】:

您需要使用union 来合并两个Sets,因为没有为Sets 定义+ 运算符。此外,beforeArraymynewarraySet,但由于 Set.union 接受类型为 Sequence 的输入参数,您可以通过在 Set 上调用 union 来解决该问题。

let merged = Array(mynewarray.union(before))

【讨论】:

    【解决方案2】:

    虽然我同意 Dávid Pásztor's answer,但我要提一下,您可以为 Set 覆盖加号运算符 +,让它执行所需的功能(联合):

    extension Set {
        static func +(lhs: Set, rhs: Set) -> Set {
            return lhs.union(rhs)
        }
    }
    

    因此,您将能够:

    var first = Set(["hi", "greeting", "hello"])
    var second = Set(["greeting", "hello", "hello", "hey"])
    
    let merged = Array(Set(first + second)) // ["hi", "hey", "greeting", "hello"]
    

    这也应该适用于您的情况。

    【讨论】:

      猜你喜欢
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 2015-09-01
      • 2017-11-22
      • 2018-06-23
      • 2023-03-10
      相关资源
      最近更新 更多