Cho mảng chữ, tôi muốn tạo một băm trong đó các khóa là các phần tử của mảng và giá trị là mảng chứa các phần tử còn lại .Phương pháp tách mảng thành các phần tử (phần tử => phần tử còn lại)
Input:
[1, 2, 3]
Output:
{1=>[2, 3], 2=>[1, 3], 3=>[1, 2]}
Thật dễ dàng nếu tôi giới thiệu một biến:
arr = [1, 2, 3]
arr.map { |i| [i, arr - [i]] }.to_h
Nhưng với một mảng đen, giải pháp duy nhất tôi có thể đưa ra có liên quan đến instance_exec
hoặc instance_eval
, có vẻ như bị hack:
[1, 2, 3].instance_exec { map { |i| [i, self - [i]] } }.to_h
Tôi có xem xét phương pháp tích hợp hoặc giải pháp hiển nhiên không? group_by
, combination
, permutation
và partition
dường như không giúp ích gì.
không liên quan, nhưng vì bạn không vượt qua bất kỳ đối số nào để chặn, tại sao không 'instance_eval'? –
@AndreyDeineko có sự khác biệt nào không? – Stefan
'[[1,2,3]] * 2' ⇒ bây giờ bạn có một bản sao :) – mudasobwa