Jak zmiksować wartości kilku tablic?

0

Witam.
Mam kilka tablic ze Stringami
np.

Dim tablica_nr1(0, 100) As String
Dim tablica_nr2(0, 100) As String
Dim tablica_nr3(0, 100) As String

Chciałbym je "zmiksować" , tzn aby elementy w tablicy się wymieszały, zamieniły miejscami...
ALE....jest jeden taki problem.. chciałbym by te elementy się wymieszały w każdej tablicy tak samo...
czyli jeśli w tablica_nr1 - string (0, 1) powędrował na (0, 50) to w tablica_nr2 i w tablica_nr3 - string (0, 1) również powędrował na (0, 50) itp itd...

zamiana znacznika <code class="sql"> na <code class="vbnet"> - @furious programming

0

Czy te 3 tablice zawierają te same elementy? Jeśli tak to mieszasz jedną tablicę i później klonujesz ją. http://stackoverflow.com/questions/108819/best-way-to-randomize-a-string-array-with-net
Jeśli w każdej tablicy jest co innego to nie lepiej napisać tablicę klas?

0

każda tablica ma inne elementy

0
class MyClass
{
   public string Prop1 {get;set;}
   public string Prop2 {get;set;}
   //itd
}

MyClass[] Array = new MyClass[100];

I mieszasz to tak jak podałem wcześniej w linku.

0

mam kilka tablic:

Tablica1(0,100)
Tablica2(0,100)
Tablica3(0,100)

Po przejsciu do TabControl1.Tabpages(x)
są odpowiednio pobierane wartosci:

TextBox1.Text = (Tablica (0,x))
TextBox2.Text  = (Tablica2 (0,x))
TextBox3.Text  = (Tablica3(0,x))

Chce wymieszać tak jakby "całe TabPages", ale trzeba to zrobić tak by Tablice się wymieszały...by to miało praktyczne działanie..

dodanie znacznika <code class="vbnet"> - @furious programming

0

A nie można tego przerzucić do jednej tablicy o rozmiarze tab1.size + tab2.size + tab3.size i wymieszać wszystko i rozdzielić pierwsze 100 elementów do pierwszej tablicy, kolejne 100 do drugiej...? ;)

0

No ja właśnie pytam o to praktyczne działanie.

0

Rozwiązanie z klasą wydaje się być bardziej eleganckie.
Nie wiem, jak kwestia złożoności, ale przy 100 elementach to chyba bez znaczenia.

static public void Shuffle(ref string[] tab1, ref string[] tab2, ref string[] tab3)
{
      if (tab1.Length != tab2.Length || tab1.Length != tab3.Length)
           throw (new InvalidOperationException());

      Random r = new Random();

      for (int n = tab1.Length - 1; n > 0; --n)
      {
          int k = r.Next(n + 1);
          Swap<string>(ref tab1[k], ref tab1[n]);
          Swap<string>(ref tab2[k], ref tab2[n]);
          Swap<string>(ref tab3[k], ref tab3[n]);
      }
}

static void Main(string[] args)
{
      string[] tab1 = { "a1", "a2", "a3", "a4", "a5" };
      string[] tab2 = { "b1", "b2", "b3", "b4", "b5" };
      string[] tab3 = { "c1", "c2", "c3", "c4", "c5" };

      Shuffle(ref tab1, ref tab2, ref tab3);
}
1

Proste rozwiązanie specjalnie dla @kosmita90he w vb.NET

Option Explicit On

Module Module1

    Private Sub RandomizeArray(Seed As Integer, ByVal items() As String)
        Dim max_index As Integer = items.Length - 1
        Dim rnd As New Random(Seed)
        For i As Integer = 0 To max_index - 1
            Dim j As Integer = rnd.Next(i, max_index + 1)
            Dim temp As String = items(i)
            items(i) = items(j)
            items(j) = temp
        Next i
    End Sub


    Sub Main()
        Dim tablica_nr1(9) As String
        Dim tablica_nr2(9) As String
        Dim tablica_nr3(9) As String

        Dim r As New Random()
        Dim seed As Integer = r.Next(10000)

        For i As Integer = 0 To 9
            tablica_nr1(i) = CStr(i)
            tablica_nr2(i) = CStr(i)
            tablica_nr3(i) = CStr(i)
        Next

        RandomizeArray(seed, tablica_nr1)
        RandomizeArray(seed, tablica_nr2)
        RandomizeArray(seed, tablica_nr3)

        For i As Integer = 0 To 9
            Console.WriteLine(tablica_nr1(i))
            Console.WriteLine(tablica_nr2(i))
            Console.WriteLine(tablica_nr3(i))
        Next

        Console.ReadKey()
    End Sub

End Module
0

ok dziekuje ;)

kod od @kAzek działa, przerobiłem pare linijek i tak to wygląda i śmiga:

    Private Sub RandomizeArray(Seed As Integer, ByVal items(,) As String)
        Dim max_index As Integer = ilosc_kart - 1
        Dim rnd As New Random(Seed)
        For i As Integer = 1 To max_index
            Dim j As Integer = rnd.Next(i, max_index + 1)
            Dim temp As String = items(0, i)
            items(0, i) = items(0, j)
            items(0, j) = temp
        Next i
    End Sub


    Sub mixuj()

        Dim r As New Random()
        Dim seed As Integer = r.Next(10000)
        RandomizeArray(seed, tablica_tresc)
        RandomizeArray(seed, tablica_link)
        RandomizeArray(seed, tablica_klucz)
        RandomizeArray(seed, tablica_pl)
        RandomizeArray(seed, tablica_download_link)
    End Sub

1 użytkowników online, w tym zalogowanych: 0, gości: 1