MATLAB混洗结构数组

时间:2015-10-20 22:14:43

标签: matlab structure swap shuffle

我有2个功能,1创建一副52张牌并将它们整理好。另一个功能是洗牌。我创建了甲板,它是有序的。该结构具有适合的属性和数字我无法改组它。我需要创建两个随机整数,范围从1到我们牌组中的牌数。使用这两个值,我们在这些指数上交换卡片。重复此交换过程很多次(~1000次)。我不能使用任何MATLAB的函数,如swap或randperm。

这是我的函数,它接受一个结构数组并返回混洗卡的结构数组:

function shuffle(input)

r=randi(1,52)
s=randi(1,52)
for index=1:52
temp=input(r).number;
input(r).number=input(s).number;
input(s).number=temp;
end;

1 个答案:

答案 0 :(得分:0)

你已经找到了交换,但需要同时包含数字和套装。此外,你不想迭代52张牌,你想简单地交换2张牌~1000次。因此,在shuffle期间添加另一个输入N作为要交换的次数,然后相应地使用for循环。此外,你需要让函数输出混乱的套牌(在C ++中,数组将通过引用传递,你不需要输出,但我不认为MATLAB会这样做。)

这应该可以解决问题:

function output = shuffle(input, N)

% swap two cards N times
for i = 1:N
    % pick two random cards each time
    r = randi(52);
    s = randi(52);

    % store one in temporary variables
    tempNum = input(r).number;
    tempSuit = input(r).suit;

    % swap 
    input(r).number = input(s).number;
    input(r).suit = input(s).suit;
    input(s).number = tempNum;
    input(s).suit = tempSuit;
end

output = input;