2013-07-24 36 views
0

說我有兩個字符串"Cat" and "Mouse"紅寶石最好的方式來獲得替代值

我把它們放在一個數組

arr = ["Cat","Mouse"] 

而且我有兩個變量說hero and villain

現在變量hero將被動態分配,這將是「貓」或「鼠標」

那麼什麼是最好的方式分配villain變量由arr

消除hero值ex

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

FYI:我知道它可以使用的功能或一些手工技巧來完成。但我只是想知道是否有任何Ruby的方式來做到這一點。

回答

2

你可以做

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

這種運作良好,如果你已經知道你的英雄是誰。如果你想同時隨機挑選兩個,7stud的更好。或者,這無損變種:

hero, villain = *arr.shuffle 
+0

Thanks..But我希望像arr.not(英雄)紅寶石功能|| arr.slice(hero) – shiva

+0

我寫的幾乎和'arr.not(hero)':'arr .-([hero])'一模一樣。能寫'arr - [hero]'是一個語法糖,真的。然而,結果是一個數組('[「Mouse」]'),所以我應用'result [0]'(我也可以寫'result。[](0)')來獲取字符串。 Ruby中的所有運算符實際上都是方法,只是它們被非常規地調用(在這種情況下爲'[]'和'-')。另外,對splat運算符('*')使用'arr.shuffle'和多次賦值非常有意思。 – Amadan

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

hero = arr.pop 
villain = arr.pop 

或者,你可以簡單的寫:

hero, villain = arr.shuffle! 

(無圖示(*)需要)

1

只是爲了掩飾sample方法:

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