2013-09-07 2 views
-2

Я новичок в C#, поэтому не обвиняйте меня в моей глупости. Я работаю над приложением, которое должно рандомизировать слово и дать ему длину, например, вы пишете слово «Линия», и оно дает вам «iLen». В настоящее время я уверен, что только эта часть работы:Рандомизация строки

private void lenght_Click(object sender, EventArgs e) 
    { 
     String word = textBox1.Text; 
     int x = word.Length; 
     MessageBox.Show(x.ToString()); 
    } 

    private void randomize_Click(object sender, EventArgs e) 
    { 
     String word = textBox1.Text; 
     int x = word.Length; 


    } 

Я пробовал много, но большинство из них только что врезались приложение так, в данный момент я хотел бы знать, что делает делает Text.ToCharArray и я хотел бы получить дополнительную поддержку. Так что мне нужен только метод, который принимает вашу случайную последовательность. Это дает вам другую строку только с пюре/рандомизированными символами. Теперь я оставлю вопрос в течение 5 - 7 часов, чтобы получить больше ответов позже. Я просмотрю их все и дам репутацию рабочим. Спасибо за поддержку! Я прочитал все ваши отзывы, но я опаздываю, потому что сейчас пришло время проверить все.

+1

До сих пор вы нашли, как показать длину строки в окне сообщения. Что вы пытались рандомизировать слово? Вы проверили документы, чтобы узнать, что делает «ToCharArray'? Проводили ли вы какие-либо исследования этой проблемы? –

+5

_Но новичок в C#, поэтому не обвиняйте noob._ Мы никогда этого не делаем! –

+1

Вы можете использовать тот же алгоритм, что описано [здесь] (http://stackoverflow.com/q/273313/335858). Преобразуйте строку в список символов, запустите перемещение и преобразуйте результат обратно в строку. – dasblinkenlight

ответ

4

Randomize метод (от another SO question):

public static T[] Randomize<T>(T[] source) 
{ 
    List<T> randomized = new List<T>(); 
    List<T> original = new List<T>(source); 
    Random r = new Random(); 
    for (int size = original.Count; size > 0; size--) 
    { 
     int index = r.Next(size); 
     randomized.Add(original[index]); 
     original[index] = original[size - 1]; 
    } 
    return randomized.ToArray(); 
} 

И использование:

string text = "Line"; 

string randomized = new string(Randomize(text.ToCharArray())); 
+3

И вы можете сделать хороший метод расширения из этого кода. –

+1

Это будет очень неэффективно для больших списков, потому что 'RemoveAt' является операцией O (n). Если массив имеет умеренный размер, то полученный алгоритм O (n^2) займет очень много времени. Вам лучше просто создать один «Список » и использовать [Fisher-Yates shuffle] (http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle) –

+0

@JimMischel Я обновил мой ответ. Должно быть лучше сейчас. – MarcinJuraszek

1
Random rand = new Random(); 
var output = new string(input.OrderBy(x => rand.Next()).ToArray()); 
Смежные вопросы