如何生成随机对

时间:2016-02-01 13:18:21

标签: ruby

我有一个这样的数组:

a = [["A", "1"], ["B", "2"], ["C", "3"], ["D", "4"], ["E", "5"]]

我需要创建一个随机对列表,删除与之前相似的新列表。

示例:

a = [["B", "4"], ["A", "2"], ["E", "3"], ["C", "5"]]

不接受:

["D", "4"]

3 个答案:

答案 0 :(得分:3)

k, v = a.transpose
a = [k, v.shuffle].transpose - a

答案 1 :(得分:1)

如果要将字母和数字混洗(如果顺序很重要),请使用:

letters, numbers = a.transpose
letters.shuffle.zip(numbers.shuffle)

如果要删除原件的重复项,请:

letters.shuffle.zip(numbers.shuffle) - a

答案 2 :(得分:0)

没有说明输出应该有多少元素。以下是适用于n输出元素的示例:

a = [["A", "1"], ["B", "2"], ["C", "3"], ["D", "4"], ["E", "5"]]

n = 3
v1, v2 = a.map(&:first), a.map(&:last)
r = (v1.flat_map {|i| v2.map {|j| [i, j]}} - a).sample(n)
#=> [["A", "3"], ["D", "1"], ["D", "5"]]