2015-06-28 118 views
0

我需要從一組給定字符串中的軌道生成2D數組。例如:從另一個陣列生成有限組合的陣列

days =[ "Monday", 
    "Tuesday", 
    "Wednesday", 
    ] 

現在我想創建一個2D陣列和該陣列中的數據將通過隨機方式使用days串補。

例子:

[monday, tuesday, wednesday], 
[tuesday, wednesday, monday] 
... 

等依賴於給定尺寸

怎麼辦呢?

編輯

我想這

# global variable 
@@test_array = %w(:sunday :monday :tuesday) 

def get_data(row, col) 
@data_field = @@test_array.permutation.to_a(col) 
return @data_field.slice!(row) 

如果我通過row:1col:1這是工作,但如果我在rowscolumn通過一個大的數字,如20是存儲在數據庫空。

編輯-2

days = ["monday, "tuesday"] 
rows = 3 
col = 3 

它應該返回(可能的解決方案之一是由於隨機生成)

[[monday, tuesday, monday],[tuesday, monday, tuesday], [monday, monday, tuesday]] 

回答

2

您可以使用Array#permutation,如果你不想在repetetions子陣。

  • col ∈ [1; 3]
  • row ∈ [0; 3]
days.permutation(col).to_a.slice(0, row) 

Demonstration

如果你想在子陣列的重複,你可以使用Array#repeated_permutation

  • col ∈ [1; 3]
  • row ∈ [0; 3 (= 27)]:
days.repeated_permutation(col).to_a.slice(0, row) 

Demonstration

如果你想在子陣列的重複,也從原來的數組的長度擴展列數的習慣,獨立號碼,您可以使用Array#repeated_combination

  • col ∈ [1; ∞
  • row ∈ [0; colcol]:
days.repeated_combination(col).to_a.slice(0, row) 

Demonstration


col是在每個子陣列元素的數量。
row是所希望的二維陣列中的子陣列的數目。
的上限被指定爲來表示,該值不被原數組的長度界定。

+1

謝謝!但是我可以在哪裏應用'rows'和'column'的限制? –

+0

@AmitPal:那麼,從1到_length_的指定參數可以控制列的數量,行數可以用['slice']切斷(http://ruby-doc.org/core-2.2 .1/Array.html#method-i-slice)方法。 – potashin

+0

你可以看看 –