【发布时间】:2012-01-18 19:48:43
【问题描述】:
假设我有两个数组:
a = [1,2,3]
b = [1,2]
我希望在这两个数组上执行一个逻辑操作,返回不在两个数组中的元素(即 3)。谢谢!
【问题讨论】:
标签: ruby arrays logical-operators
假设我有两个数组:
a = [1,2,3]
b = [1,2]
我希望在这两个数组上执行一个逻辑操作,返回不在两个数组中的元素(即 3)。谢谢!
【问题讨论】:
标签: ruby arrays logical-operators
Ruby 中的数组非常方便地重载了一些数学和位运算符。
在a 中但不在b 中的元素
a - b # [3]
a 和 b 中的元素
a & b # [1, 2]
a 或 b 中的元素
a | b # [1, 2, 3]
数组总和(串联)
a + b # [1, 2, 3, 1, 2]
你明白了。
【讨论】:
a & b,尤其是当数组中有重复元素时
p (a | b) - (a & b) #=> [3]
或者使用集合
require 'set'
a.to_set ^ b
【讨论】:
看这个解还有第三种方式,直接回答问题,不需要用到集合:
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]
【讨论】: