【发布时间】:2016-03-14 19:59:06
【问题描述】:
我想以某种方式“洗牌”Tuple<bool,int[]>[],但我不需要完全洗牌我想将第一个的位置与第二个交换而不是将第一个的位置与第三个交换,即第一个应该与所有其他元组交换位置,而不是第二个应该这样做。我会尝试用一些简单的数字来解释它,比如彩票:
我们有 1,2,3 让我们假设这些是我现在的 3 个元组:
- 首先我们将 1 与 2 切换,得到 2,1,3;
- 第二次我们将 1 与 3 切换,得到 2,3,1;
- 我们再次将 1 与 2 切换,得到 1,3,2;
- 我们再次将 1 与 3 切换,得到 3,1,2;
- 最后我们把 1 换成 2 得到 3,2,1;
这就是我想用我的元组实现的目标:
Tuple<bool, int[]>[] hodove =
{
new Tuple<bool, int[]>(Nadqsno(red, 1) && Napred(kolona, 2), new[]
{
count++,
novMinatRed = red + 1,
novaMinataKolona = kolona + 2
}),
new Tuple<bool, int[]>(Nadqsno(red, 2) && Napred(kolona, 1), new[]
{
count++,
novMinatRed = red + 2,
novaMinataKolona = kolona + 1
}),
new Tuple<bool, int[]>(Nalqvo(red, 1) && Napred(kolona, 2), new[]
{
count++,
novMinatRed = red - 1,
novaMinataKolona = kolona + 2
}),
new Tuple<bool, int[]>(Nalqvo(red, 2) && Napred(kolona, 1), new[]
{
count++,
novMinatRed = red - 2,
novaMinataKolona = kolona + 1
}),
new Tuple<bool, int[]>(Nadqsno(red, 2) && Nazad(kolona, 1), new[]
{
count++,
novMinatRed = red + 2,
novaMinataKolona = kolona - 1
}),
new Tuple<bool, int[]>(Nalqvo(red, 2) && Nazad(kolona, 1), new[]
{
count++,
novMinatRed = red - 2,
novaMinataKolona = kolona - 1
}),
new Tuple<bool, int[]>(Nadqsno(red, 1) && Nazad(kolona, 2), new[]
{
count++,
novMinatRed = red + 1,
novaMinataKolona = kolona - 2
}),
new Tuple<bool, int[]>(Nalqvo(red, 1) && Nazad(kolona, 2), new[]
{
count++,
novMinatRed = red - 1,
novaMinataKolona = kolona - 2
}),
};
【问题讨论】:
-
您最终希望数组反转。那么为什么不简单地反转数组呢?您已经在 C# 中有
Array.Reverse函数。所以它只是一行代码。还是我错过了什么? -
反过来有什么帮助?它只是将数组向后排序。我现在看到了,当我看到它时,我可能还不够清楚,它实际上很混乱.. 对不起,我不想只是拥有它 3,2,1 它可能已经像 2,3,1 一样结束了,我只是想要数组中的每个元组与内部的每个其他元组交换位置
-
所以你想按随机顺序制作?
-
您知道彩票中有几百万种可能的组合吧?好吧,我想为我的 8 个数组以每种可能的组合移动数组。我不希望它是随机的,因为它有机会重复以前完成的组合
-
在那种情况下,我认为你应该生成一个随机序列。然后将输出与之前的输出进行比较。如果找到,您重复它并生成另一个。否则,无论您使用什么算法,您的彩票号码都有可能是可预测的。
标签: c# arrays algorithm boolean tuples