红宝石获得替代价值的最佳方式

时间:2013-07-24 05:39:32

标签: ruby-on-rails ruby arrays

说我有两个字符串"Cat" and "Mouse"

我把它们放在一个数组

arr = ["Cat","Mouse"]

我有两个变量说hero and villain

现在变量hero将动态分配,可以是“Cat”或“Mouse”

那么通过消除villain

中的hero值来分配arr变量的最佳方式是什么?

实施例

hero = # Either "Cat" or "Mouse"
villain = # The NOT HERO VALUE in arr

仅供参考:我知道可以使用功能或一些手动技巧来完成。但我只是想知道是否有任何Ruby方法可以做到这一点。

3 个答案:

答案 0 :(得分:3)

arr = ["Cat","Mouse"]
arr.shuffle!

hero = arr.pop
villain = arr.pop

或者,您可以简单地写一下:

hero, villain = arr.shuffle!

(不需要splat(*))

答案 1 :(得分:2)

你可以做到

villain = (arr - [hero])[0]

如果你已经知道你的英雄是谁,那么效果很好。如果你想同时随机选择,7stud更好。或者这种非破坏性变体:

hero, villain = *arr.shuffle

答案 2 :(得分:1)

仅涵盖sample方法:

arr = ["Cat","Mouse"]
hero, villain = arr.sample(2)