【问题标题】:Switch places of Tuples in a Tuple array在元组数组中交换元组的位置
【发布时间】: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


【解决方案1】:

您是否尝试通过逐步交换数组中的元素来枚举所有排列? Heap's algorithm 之类的东西?

【讨论】:

  • 这作为评论会更好,因为这是一个澄清问题。它在技术上回答了他的问题,因为您建议使用 Heap 的算法,但我会说在评论中提出第一个问题,如果他说这是他正在寻找的,那么将一个完整的答案放在一起,而不是使用 Heap 算法的模糊建议.
  • @kevin-wells,我同意,但 StackOverflow 规则不允许我发表评论。
  • 在这种情况下,我建议将您的答案重写为一个完整的答案,假设 Heap 的算法是他正在寻找的,如果不是,那么您可以稍后对其进行编辑。不应通过写 cmets 作为答案来规避评论的限制
【解决方案2】:

如果你想要的是一个字符串的所有排列,你可以使用像here这样的交换算法

你使用元组数组而不是字符串

【讨论】:

    猜你喜欢
    • 2012-01-30
    • 2012-09-21
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多