从另一个数组生成有限组合的数组

时间:2015-06-28 00:01:48

标签: ruby-on-rails arrays ruby combinations

我需要从一组给定的字符串中生成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,则它会在数据库中存储null。

修改-2

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

它应该返回(由于随机生成而可能的解决方案之一)

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

1 个答案:

答案 0 :(得分:2)

如果您不想在子阵列中重复,可以使用Array#permutation

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

Demonstration

如果您想在子阵列中重复,可以使用Array#repeated_permutation

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

Demonstration

如果您想在子阵列中重复并将列号扩展为自定义,与原始数组编号的长度无关,则可以使用Array#repeated_combination

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

Demonstration

1 row是每个子数组中元素的数量。
2 RandomAccessFile是所需2D数组中子数组的数量。
3 上限指定为,表示此值不受原始数组长度的限制。