2016-03-14 120 views
-2

我想以某种方式“洗牌”Tuple<bool,int[]>[]但我不需要准确地洗牌我想切换第一个位置与第二个位置相比切换第一个位置第三个是第一个应该与其他所有元组交换位置,而第二个应该这样做。我会尝试一些简单的数字来解释它像中了彩票:Tuple切换Tuple数组中的位置

我们已经1,2,3让我们假设这些都是我的3元组现在:

  • 首先我们切换1与2,我们得到2,1,3;
  • 第二我们切换1与3,我们得到2,3,1;
  • 我们再次将2与1切换,得到1,3,2;
  • 我们再次用3切换1,得到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 
      }), 
     }; 
+0

你最终想要颠倒数组。那么为什么不简单地颠倒阵列呢?你已经在C#中有'Array.Reverse'函数。所以它只是一个行代码。或者我错过了什么? –

+0

反过来如何帮助?它只是将数组向后排序。我现在看到它,我可能不够清楚,当我看它时,它实际上很杂乱。对不起,我不想只是拥有它3,2,1它可能已经结束像2,3,1我只是想数组中的每一个元组都可以与其他所有元组进行切换 – KOPEUE

+0

所以你想使它成为随机序列? –

回答

0

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

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

0

你想通过逐步交换数组中的元素来枚举所有的排列吗?像Heap's algorithm

+0

这将是更好的评论,因为它是一个澄清的问题。它在技术上回答了他的问题,因为你提出了Heap的算法,但是我会说在评论中提出第一个问题,如果他说这是他正在寻找的内容,那么将一个完整答案放在一起,而不是使用Heap算法的模糊建议。 –

+0

@ kevin-wells,我同意,但StackOverflow规则不允许我发表评论。 –

+0

在这种情况下,我会建议重写你的答案是一个完整的答案,假设堆的算法是他正在寻找的,如果它不是,那么你可以稍后编辑它。评论的限制不应该通过写评论来回避 –