【问题标题】:Ruby Logical Operators - Elements in one but not both arraysRuby 逻辑运算符 - 一个数组中的元素,但不是两个数组
【发布时间】:2012-01-18 19:48:43
【问题描述】:

假设我有两个数组:

a = [1,2,3]
b = [1,2]

我希望在这两个数组上执行一个逻辑操作,返回不在两个数组中的元素(即 3)。谢谢!

【问题讨论】:

    标签: ruby arrays logical-operators


    【解决方案1】:

    Ruby 中的数组非常方便地重载了一些数学和位运算符。

    a 中但不在b 中的元素

     a - b # [3]
    

    ab 中的元素

     a & b # [1, 2]
    

    ab 中的元素

     a | b # [1, 2, 3]
    

    数组总和(串联)

     a + b # [1, 2, 3, 1, 2]
    

    你明白了。

    【讨论】:

    【解决方案2】:
    p (a | b) - (a & b) #=> [3]
    

    或者使用集合

    require 'set'
    a.to_set ^ b
    

    【讨论】:

    • (a | b) - (a & b) 是正确答案。 a - b 的问题在于它是特定于订单的。 b - a 给出 [] 的不同结果。
    【解决方案3】:

    看这个解还有第三种方式,直接回答问题,不需要用到集合:

    r = (a-b) | (b-a)
    

    (a-b) 将为您提供数组 a 中的内容,但不提供 b:

    a-b
    => [3] 
    

    (b-a) 将为您提供数组 b 中的内容,但不提供 a:

    b-a 
    => [] 
    

    两个数组减法的 OR-ing 将为您提供不在两个数组中的任何内容的最终结果:

    r = ab | ba
    => [3]
    

    另一个例子可能更清楚:

    a = [1,2,3]
    => [1, 2, 3] 
    
    b = [2,3,4]
    => [2, 3, 4] 
    
    a-b
    => [1] 
    
    b-a
    => [4] 
    
    r = (a-b) | (b-a)
    => [1, 4] 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 2017-11-12
      • 2016-05-05
      • 2018-04-21
      • 1970-01-01
      • 2016-10-02
      相关资源
      最近更新 更多