Рандомизация регистра букв C#

Tsuk15

Client
Регистрация
25.04.2017
Сообщения
102
Благодарностей
40
Баллы
28
Всем привет. Сижу и не понимаю, что происходит... Сделал сниппет, который берет из списка домен, раскладывает его на символы, а потом рандомно изменяет регистр букв. Должно получаться что-то вроде: doMeN.cOm Сам сниппет вот такой
Код:
var list = project.Lists["Домены"];
string domen = list[new Random().Next(0,list.Count)]; //беру рандомный домен из списка
string res = "";
MatchCollection chars = Regex.Matches(domen,@"\S"); //разделяю домен на символы
foreach(Match match in chars) //перебираю все символы
{
    int rand_num = new Random().Next(0,2);
    //project.SendInfoToLog(rand_num.ToString(),true);
    string w = Regex.Match(match.ToString(),@"\w").ToString();
    if(w.Length>0) //если символ буква
    {
        if(rand_num==1)
        {
            res+=w.ToUpper();
        }
        else
        {
            res+=w;
        }
    }
    else
    {
        res+=match.ToString();
    }
}
return res;
Не знаю где тут ошибка, но в результате получается домен или полностью в верхнем или полностью в нижнем регистре. А теперь важное замечание. Я скорее всего не писал бы сюда и пытался бы разобраться сам, если не один момент. На 8ой строке вы можете увидеть закомментированную строку с оповещением. Так вот, если я её раскомментирую, то сниппет отрабатывает нужным мне образом, но выводит результаты рандома в лог. Изначально я добавил эту строку, чтобы проверить результат переменной rand_num от которой зависит регистр буквы. Короче магия какая-то))) Сижу туплю и не понимаю как так.
p.s. Может быть код сам по себе костыльный, но в любом случае хочется узнать причину этого волшебства
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
а точно работает ? не знаю как у тебя там в верхний регистр изменило

2019-02-03_205311.png
 
  • Спасибо
Реакции: one

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
пробуй
C#:
var list = project.Lists["Домены"];
string domen = list[new Random().Next(0, list.Count)]; //беру рандомный домен из списка
string res = "";
MatchCollection chars = Regex.Matches(domen, @"\S"); //разделяю домен на символы

foreach(Match match in chars) //перебираю все символы
{
    int rand_num =  Global.Classes.rnd.Next(0, 2);
    //project.SendInfoToLog(rand_num.ToString(),true);
    string w = Regex.Match(match.ToString(),@"\w").ToString();
   
    if (w.Length > 0) //если символ буква
    {
        if(rand_num == 1)
        {
            res += w.ToUpper();
        }
        else
        {
            res += w;
        }
    }
    else
    {
        res += match.ToString();
    }
}
return res;
ответы

2019-02-03_210404.png
 
  • Спасибо
Реакции: one

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
в каждой итерация по новой объявляется рандом. Поскольку сид рандома зависит от времени, а итерации пробегают практически мгновенно - рандом каждый раз один и тот же. Либо выноси создание объекта рандома в начало сниппета и далее уже пользуйся им, не создавая каждый раз новый, либо пользуйся зенновским в примере выше. Но у последнего бывают баги, увы
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
прикольнот с умничал, помню где о псал что сам таким методом пользуешься, бля как ты любишь глагольствовать ))
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
прикольнот с умничал, помню где о псал что сам таким методом пользуешься, бля как ты любишь глагольствовать ))
после некоторых инцидентов не пользуюсь. Я не пытался как-то принизить твоё решение, я сказал, как было у меня. Кстати, не только у меня
 

Tsuk15

Client
Регистрация
25.04.2017
Сообщения
102
Благодарностей
40
Баллы
28
пробуй
C#:
var list = project.Lists["Домены"];
string domen = list[new Random().Next(0, list.Count)]; //беру рандомный домен из списка
string res = "";
MatchCollection chars = Regex.Matches(domen, @"\S"); //разделяю домен на символы

foreach(Match match in chars) //перебираю все символы
{
    int rand_num =  Global.Classes.rnd.Next(0, 2);
    //project.SendInfoToLog(rand_num.ToString(),true);
    string w = Regex.Match(match.ToString(),@"\w").ToString();
  
    if (w.Length > 0) //если символ буква
    {
        if(rand_num == 1)
        {
            res += w.ToUpper();
        }
        else
        {
            res += w;
        }
    }
    else
    {
        res += match.ToString();
    }
}
return res;
ответы

Посмотреть вложение 35860
Спасибо, этот код работает))
в каждой итерация по новой объявляется рандом. Поскольку сид рандома зависит от времени, а итерации пробегают практически мгновенно - рандом каждый раз один и тот же. Либо выноси создание объекта рандома в начало сниппета и далее уже пользуйся им, не создавая каждый раз новый, либо пользуйся зенновским в примере выше. Но у последнего бывают баги, увы
Спасибо, теперь понял причину, раньше всегда выносил. Не знал, что это может так повлиять
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)