Miksowanie elementów tablicy

0

Witam wszystkich!

Mam pewną tablicę wyrazów dla przykładu:

string[] wyrazy = {kot, pies, kura}

szukam prostej metody, aby wymieszać elementy tablicy tak, aby wszystkie zmieniły swoją kolejność
dla przykładu powyższa tablica wyglądałaby po metaformozie tak:

string[] wyrazy = {pies, kura, kot}

ich kolejność jest losowa.

Proszę o pomoc

0

shuffle.

for i <- 0 to n-2:
  j <- rand(i, n-1)
  swap tablica[i] <-> tablica[j]

n - ilosc elementow tablicy

0

Chodziło mi, aby elementy były losowe, a nie przesunięte o 1.
Coś na zasadzie najzwyczajniej permutacji.
Jak wykonać w C# permutacje?

Random random = new Random()
random.Next(i, tablica.lenght + 1)

i losuje element z tablicy, ale co zrobic, aby wylosowany element się nie powtórzył przy kolejnych losowaniach?

0

Chciałeś, aby wszystkie elementy w tablicy zmieniły kolejność. Permutacja tego nie gwarantuje. Najprostszym sposobem na pomieszanie elementów, bez algorytmu permutacji jest zamiana dwóch wybranych określoną ilość razy, proste i skuteczne.

0

w jakiejś statycznej klasie

private static Random random = new Random();
public static IOrderedEnumerable<TSource> OrderByRandom<TSource>(this IEnumerable<TSource> source)
{
	return source.OrderBy(s => random.Next());
}

użycie:

var ra = new string[] { "a", "b", "c" }.OrderByRandom().ToArray();

[edit] fcuk, to praktycznie kod z pierwszego linku Spine'a :/

0
Chorąży napisał(a):

tak, aby wszystkie zmieniły swoją kolejność

  1. Chodzi o zwykłe losowe przemieszanie elementów jak to się dzieje np. podczas tasowania kart? Czy może każdy element musi zmienić swoją pozycję? Czy może chodzi o kolejność tak jak piszesz - dowolne dwa elementy które następowały po sobie przed mieszanie, po przemieszaniu nie mogą znajdować się już jeden po drugim?
  2. Jeśli każdy musi zmienić pozycję lub kolejność, to czy elementy są rozróżnialne? Czy zamiana dwóch identycznych elementów miejscami (czyli de facto brak zamiany) spełnia kryteria przemieszania? A może zakładamy, że w tablicy nie będzie powtórzeń?

Jeśli chodzi o nadanie nowej, losowej kolejności elementom, czyli przypadek najprostszy, to odpowiedź podał @dawidgarus i @ŁF

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