Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Случайный выбор из двух фраз (слов)

#c_sharp #случайные_числа


Подскажите, имеется ли какой-нибудь простой метод выбора из двух фраз. Например,
реализующий такое
Random r = new Random();
string stroka ="стакан";
switch(r.Next(2))
{
     case 0:
          stroka += " холодный";
          break;
     case 1:
          stroka += " теплый";
          break;
}

Этот код слишком грамоздкий, есть ли какое либо сокращение? Например:
функция(стакан {теплый|холодный});    


Ответы

Ответ 1



Можно крутить как угодно, первое что пришло в голову string stroka ="стакан"; string[] arr = {"теплый","холодный"}; Console.WriteLine(stroka+" "+arr[new Random().Next(0, arr.Length-1)]); Если нужно именно функцией, то можно так: public string ArrayRand(String stroka, String[] arr) { return stroka += " "+arr[new Random().Next(0, arr.Length-1)]; }

Ответ 2



Вот однострочник: var stroka = new Random().Next(2) == 0 ? "стакан холодный" : "стакан теплый";

Ответ 3



Вот вы пишите (в комментарии под первым ответом): да, но это тоже не удобно, грамоздко... представте если это не два слова, а целый абзац, где десятки слов которые должны подставиться случайно. в общем по сути это генеротор уникальных текстов получается В таком случае могу предложить такое вот решение, додумать до конца должны сами, ведь слова в абзаце могут разделять и точки, и запятые, и прочие знаки препинания. Вот идея: ... // наш абзац со словами =) string strings = "hot cold red blue white old new green light"; // и вот мы их разбиваем на словечки, далее - стандартная схема! string[] words = strings.Split(' '); string mainword = "cap is "; Random rand = new Random(); int num = rand.Next(0, words.Length); mainword += words[num]; MessageBox.Show(mainword); ...

Ответ 4



Можно еще так, добавить extension для массива. К примеру : string stroka ="стакан"; string[] arr = {"теплый","холодный"}; Console.WriteLine(arr.Rnd()); и Класс расширений для массива public static class ArrayExtensions { public static string Random(this string[] arr) { return arr[new Random().Next(0, arr.Length - 1)]; } } То же самое, что предлагал johniek_comp, только удобней в использовании, имхо.

Комментариев нет:

Отправить комментарий