【发布时间】:2015-05-08 10:25:56
【问题描述】:
给定一个数组文字,我想创建一个散列,其中键是数组中的元素,值是包含其他/剩余元素的数组。
输入:
[1, 2, 3]
输出:
{1=>[2, 3], 2=>[1, 3], 3=>[1, 2]}
如果我引入一个变量很容易:
arr = [1, 2, 3]
arr.map { |i| [i, arr - [i]] }.to_h
但是对于数组字面量,我能想出的唯一解决方案是 instance_exec 或 instance_eval,这似乎很老套:
[1, 2, 3].instance_exec { map { |i| [i, self - [i]] } }.to_h
我是否忽略了内置方法或明显的解决方案? group_by、combination、permutation 和 partition 似乎没有帮助。
【问题讨论】:
-
不相关,但既然你不传递任何参数来阻止,为什么不
instance_eval? -
@AndreyDeineko 有区别吗?
-
[[1,2,3]] * 2⇒ 现在你有一个副本:) -
@Stefan 在
instance_eval和instance_exec之间 - 是的:) -
@mudasobwa
tap不会返回原始数组吗?
标签: ruby