首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >红宝石中的压缩{ n1,n2,n2,n1^ n2}

红宝石中的压缩{ n1,n2,n2,n1^ n2}
EN

Stack Overflow用户
提问于 2014-03-27 22:08:38
回答 2查看 138关注 0票数 1

我不是一个Ruby的人,所以我可能会错过一些非常基本的东西,但我还没有弄清楚:假设我有一个包含任意数量的2个元素数组的整数。我想按位xor每组两个整数。

我现在用的是非常明显的

代码语言:javascript
复制
l.map {|n1, n2| n1 ^ n2}

不过,我的第一个想法是按照l.map &:^的思路做一些事情。显然,这是不可能的,因为不存在像Array#^这样的东西,并且得到的proc不进行参数解包装。是否有一种很好的方法来使用符号来编程逻辑,或者我是否坚持使用函数,但毫无疑问,我目前使用的解决方案不那么优雅?

致以敬意,

磷酸铜

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-27 23:03:27

有一种使用Symbol#to_proc的方法,但是它不会比您已经拥有的(非常好的)解决方案更好,因为它涉及定义Array#^

代码语言:javascript
复制
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(&:^)
票数 3
EN

Stack Overflow用户

发布于 2014-03-27 23:15:40

恐怕(?)你已经找到了最简单的写作方法。

有一些使用Symbol#to_proc的方法,但它们没有那么好:

代码语言:javascript
复制
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] 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22700255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档