Как взять несколько рандомных строк из списка?

maxim.gutareff

Пользователь
Регистрация
27.01.2018
Сообщения
255
Благодарностей
22
Баллы
18
Есть список в котором 100 строк. Мне нужно брать из него 15 строк. Не первых, а рандомно.
Сейчас я просто беру по рандомной строке и кладу во временный список. И увеличиваю каждый раз число в переменной на 1.
Затем сравниваю ее пока до 15 не дойдет.

Это конечно все работает, но столько много операций. Может есть у кого C# код который бы делал это за раз.
То есть брал 15 рандомных строк и закидывал их в переменную? Не во временный список, а именно в переменную.

По честному шерстил форум. Не нашлось такого кода. Только моя схема.
 

fri-lancer

Client
Регистрация
01.10.2013
Сообщения
416
Благодарностей
155
Баллы
43
Есть список в котором 100 строк. Мне нужно брать из него 15 строк. Не первых, а рандомно.

C#:
//взять по 15 рандомных строк из списка в переменную с переносом строки
var list = project.Lists["Список 1"].ToList();
list.Shuffle();
project.Variables["strings"].Value = string.Join("\r\n", list.Take(15).ToArray());
 
  • Спасибо
Реакции: maxim.gutareff

maxim.gutareff

Пользователь
Регистрация
27.01.2018
Сообщения
255
Благодарностей
22
Баллы
18
C#:
//взять по 15 рандомных строк из списка в переменную с переносом строки
var list = project.Lists["Список 1"].ToList();
list.Shuffle();
project.Variables["strings"].Value = string.Join("\r\n", list.Take(15).ToArray());
Спасибо! А можно за место 15 указать переменную "random"?
Я вот сделал так, а не работает:


//взять по 15 рандомных строк из списка в переменную с переносом строки
var list = project.Lists["Аккаунты"].ToList();
list.Shuffle();
project.Variables["token"].Value = string.Join("\r\n", list.Take "{-Variable.random-}" .ToArray());
 

WalkODoff

Client
Регистрация
09.04.2016
Сообщения
155
Благодарностей
33
Баллы
28
Спасибо! А можно за место 15 указать переменную "random"?
Я вот сделал так, а не работает:
потому что надо вот так

C#:
//взять по 15 рандомных строк из списка в переменную с переносом строки
var list = project.Lists["Аккаунты"].ToList();
list.Shuffle();
var random = Convert.ToInt16(project.Variables["random"].Value);
project.Variables["token"].Value = string.Join("\r\n", list.Take(random).ToArray());
 
Последнее редактирование:
  • Спасибо
Реакции: maxim.gutareff

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 787
Благодарностей
1 455
Баллы
113
Спасибо! А можно за место 15 указать переменную "random"?
Я вот сделал так, а не работает:


//взять по 15 рандомных строк из списка в переменную с переносом строки
var list = project.Lists["Аккаунты"].ToList();
list.Shuffle();
project.Variables["token"].Value = string.Join("\r\n", list.Take "{-Variable.random-}" .ToArray());

C#:
Random r = new Random();
int rnd = r.Next(0, 16);
var list = project.Lists["list"].ToList();
list.Shuffle();
project.Variables["strings"].Value = string.Join("\r\n", list.Take(rnd).ToArray());
return $"Из списка list в переменную strings получили {rnd} строк.";
или так:
C#:
var list = project.Lists["list"].ToList();
list.Shuffle();
project.Variables["strings"].Value = string.Join("\r\n", list.Take(int.Parse(project.Variables["random"].Value)).ToArray());
 
  • Спасибо
Реакции: maxim.gutareff

maxim.gutareff

Пользователь
Регистрация
27.01.2018
Сообщения
255
Благодарностей
22
Баллы
18
Всем огромное спасибо!
 

maxim.gutareff

Пользователь
Регистрация
27.01.2018
Сообщения
255
Благодарностей
22
Баллы
18
C#:
Random r = new Random();
int rnd = r.Next(0, 16);
var list = project.Lists["list"].ToList();
list.Shuffle();
project.Variables["strings"].Value = string.Join("\r\n", list.Take(rnd).ToArray());
return $"Из списка list в переменную strings получили {rnd} строк.";
или так:
C#:
var list = project.Lists["list"].ToList();
list.Shuffle();
project.Variables["strings"].Value = string.Join("\r\n", list.Take(int.Parse(project.Variables["random"].Value)).ToArray());
Супер! Такой маленький код, а столько радости! А можно еще сделать что бы строки из переменой "bad" не брались при взятии из списка? Ну то есть в переменной будут строки которые есть в списке "list" и код не должен из него брать те которые есть в переменной "bad".
В переменной эти строки будут каждая с новой строки.
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
737
Благодарностей
485
Баллы
63
  • Спасибо
Реакции: maxim.gutareff

maxim.gutareff

Пользователь
Регистрация
27.01.2018
Сообщения
255
Благодарностей
22
Баллы
18
У ZP есть еще свой собственный метод, чтобы брать рандомные строки из списка
https://help.zennolab.com/en/v7/zennoposter/7.1.4/webframe.html#topic1200.html
Супер! Такой маленький код, а столько радости! А можно еще сделать что бы строки из переменой "bad" не брались при взятии из списка? Ну то есть в переменной будут строки которые есть в списке "list" и код не должен из него брать те которые есть в переменной "bad".
В переменной эти строки будут каждая с новой строки.
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
737
Благодарностей
485
Баллы
63
Супер! Такой маленький код, а столько радости! А можно еще сделать что бы строки из переменой "bad" не брались при взятии из списка? Ну то есть в переменной будут строки которые есть в списке "list" и код не должен из него брать те которые есть в переменной "bad".
В переменной эти строки будут каждая с новой строки.
Я бы переделал логику работы.
Сделал 3 списка:
1 - список значение
2 - список плохих значений
3 - список рандомных значений без плохих

Что-то типа такого
C#:
var countRndItems = "10";
var lstItems = project.Lists["items"];
var lstBadItems = project.Lists["badItems"];
var lstRndItems = lstItems
    .GetItems($"random{countRndItems}")
    .Except(lstBadItems)
    .ToList();

var result = string.Join("\r\n", lstRndItems); // Тут я бы подумал над логикой и оставил их списком, так работать удобней будет!
return result;
*код не проверял возможно не совсем правильно будет работать!
 
Последнее редактирование:
  • Спасибо
Реакции: maxim.gutareff

maxim.gutareff

Пользователь
Регистрация
27.01.2018
Сообщения
255
Благодарностей
22
Баллы
18
Я бы переделал логику работы.
Сделал 3 списка:
1 - список значение
2 - список плохих значений
3 - список рандомных значений без плохих

Что-то типа такого
C#:
var countRndItems = "10";
var lstItems = project.Lists["items"];
var lstBadItems = project.Lists["badItems"];
var lstRndItems = lstItems
    .GetItems($"random{countRndItems}")
    .Except(lstBadItems)
    .ToList();

var result = string.Join("\r\n", lstRndItems); // Тут я бы подумал над логикой и оставил их списком, так работать удобней будет!
return result;
*код не проверял возможно не совсем правильно будет работать!
Код работает) А можете дописать что бы удалялись взятые строки из файла?
 
Последнее редактирование:

maxim.gutareff

Пользователь
Регистрация
27.01.2018
Сообщения
255
Благодарностей
22
Баллы
18
C#:
Random r = new Random();
int rnd = r.Next(0, 16);
var list = project.Lists["list"].ToList();
list.Shuffle();
project.Variables["strings"].Value = string.Join("\r\n", list.Take(rnd).ToArray());
return $"Из списка list в переменную strings получили {rnd} строк.";
или так:
C#:
var list = project.Lists["list"].ToList();
list.Shuffle();
project.Variables["strings"].Value = string.Join("\r\n", list.Take(int.Parse(project.Variables["random"].Value)).ToArray());
А у вас есть телеграм для связи? Хочу заказать доработку кода. Готов заплатить! Вот мой: https://t.me/Gytareff
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
737
Благодарностей
485
Баллы
63

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