我不是一个Ruby人,所以我可能会错过一些非常基本的东西,但我还无法弄明白:说我有一个包含任意数量的2个元素数组的数组整数。我想按位xor每组两个整数 我目前使用非常明显的
l.map {|n1, n2| n1 ^ n2}
我的第一个问题是尽可能按照l.map &:^
的方式做点什么。显然这是不可能的,因为没有Array#^
这样的东西,并且结果proc没有做参数解包。有没有一种很好的方法可以使用符号来处理逻辑,或者我是否坚持使用功能性的,但无疑是我目前使用的不太优雅的解决方案?
的问候,
磷酸铜
答案 0 :(得分:3)
有一种方法可以使用Symbol#to_proc
执行此操作,但它不会比您已有的(恰好)解决方案更好,因为它涉及定义Array#^
。
class Array
def ^
raise("Not a two-element array") unless (self.length == 2)
raise("Array contains non-numeric values") unless (self.all? {|n| Integer === n })
return self[0] ^ self[1]
end
end
l.map(&:^)
答案 1 :(得分:1)
我害怕(?)你已经找到了最简单的写作方式。
有一些方法可以使用Symbol#to_proc
,但它们并不那么好:
arr = [[1, 2], [2, 5], [23, 100], [5, 1], [4, 10]]
arr.map { |a, b| a ^ b }
# => [3, 7, 115, 4, 14]
arr.map { |pair| pair.reduce(&:^) }
#=> [3, 7, 115, 4, 14]