Как получить случайную строку Списки C#

Арман

Client
Регистрация
04.07.2019
Сообщения
137
Благодарностей
32
Баллы
28
Как получить случайную строку Списки C#
смотрел видео уроки там объясняется что 0 это первый
а как выбрать случайное и потом этот выбор удалить
project.Variables["Aphoto"].Value = Aphoto[0];
Aphoto.RemoveAt(0);
 
  • Спасибо
Реакции: Reysh

Reysh

Client
Регистрация
02.12.2018
Сообщения
198
Благодарностей
132
Баллы
43
Код:
//Удаляем случайный элемент списка из диапазона от 0 до количества строк в списке
project.Lists["Aphoto"].RemoveAt(new Random().Next(0,project.Lists["Aphoto"].Count));
 
Последнее редактирование модератором:
  • Спасибо
Реакции: Mikhail B. и Арман

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
66
Баллы
28
Ну что типо такого

Код:
//Получаем случайнную строку
int rnd = new Random().Next(0, project.Lists["Список 1"].Count);
var ListItem = project.Lists["Список 1"][rnd];

//Удаляем строку
project.Lists["Список 1"].RemoveAt(rnd);

return ListItem;
 
Последнее редактирование модератором:

Арман

Client
Регистрация
04.07.2019
Сообщения
137
Благодарностей
32
Баллы
28
выложу может кому будет полезно

//Получаем случайнную строку
int rnd = new Random().Next(0, project.Lists["Список"].Count );
var ПЕРЕМЕНАЯ = project.Lists["Список"][rnd];
// Указиваем переменую
project.Variables["ПЕРЕМЕНАЯ"].Value = ПЕРЕМЕНАЯ;
//Удаляем строку
project.Lists["Список"].RemoveAt(rnd);


и ещё один вариант Если хотите брать первую строку

//указиваем переменую и с каким списком работаем
var ПЕРЕМЕНАЯ = project.Lists["СПИСОК"];
//указиваем переменую и какую строку берем 0 значит первую
project.Variables["ПЕРЕМЕНАЯ"].Value = ПЕРЕМЕНАЯ[0];
//берем строку с удалением и указиваем какую строку удалить 0 значит первую
ПЕРЕМЕНАЯ.RemoveAt(0);
 
Последнее редактирование модератором:
  • Спасибо
Реакции: Mikhail B. и bekas

Reysh

Client
Регистрация
02.12.2018
Сообщения
198
Благодарностей
132
Баллы
43
выложу может кому будет полезно

//Получаем случайнную строку
int rnd = new Random().Next(0, project.Lists["Список"].Count - 1);
var ПЕРЕМЕНАЯ = project.Lists["Список"][rnd];
// Указиваем переменую
project.Variables["ПЕРЕМЕНАЯ"].Value = ПЕРЕМЕНАЯ;
//Удаляем строку
project.Lists["Список"].RemoveAt(rnd);


и ещё один вариант Если хотите брать первую строку

var ПЕРЕМЕНАЯ = project.Lists["СПИСОК"];//указиваем с каким списком работаем
project.Variables["ПЕРЕМЕНАЯ"].Value = ПЕРЕМЕНАЯ[0];//указиваем переменую и какую строку берем 0 значит первую
ПЕРЕМЕНАЯ.RemoveAt(0);//берем строку с удалением и указиваем какую строку удалить 0 значит первую
А выше, разве не тоже самое? :ca:
 

Арман

Client
Регистрация
04.07.2019
Сообщения
137
Благодарностей
32
Баллы
28
А выше, разве не тоже самое? :ca:
Я просто ещё новичок и час наверное мучился не мог понять Как сохранить в переменную для опытного конечно всё уже понятно и в первом варианте
 
  • Спасибо
Реакции: Reysh

Reysh

Client
Регистрация
02.12.2018
Сообщения
198
Благодарностей
132
Баллы
43
Я просто ещё новичок и час наверное мучился не мог понять Как сохранить в переменную для опытного конечно всё уже понятно и в первом варианте
Почему не используешь стандартные кубики? Там есть эта функция
 

Арман

Client
Регистрация
04.07.2019
Сообщения
137
Благодарностей
32
Баллы
28

ZComand

Client
Регистрация
02.02.2016
Сообщения
57
Благодарностей
63
Баллы
18
выложу может кому будет полезно

//Получаем случайнную строку
int rnd = new Random().Next(0, project.Lists["Список"].Count - 1);
var ПЕРЕМЕНАЯ = project.Lists["Список"][rnd];
// Указиваем переменую
project.Variables["ПЕРЕМЕНАЯ"].Value = ПЕРЕМЕНАЯ;
//Удаляем строку
project.Lists["Список"].RemoveAt(rnd);


и ещё один вариант Если хотите брать первую строку

//указиваем переменую и с каким списком работаем
var ПЕРЕМЕНАЯ = project.Lists["СПИСОК"];
//указиваем переменую и какую строку берем 0 значит первую
project.Variables["ПЕРЕМЕНАЯ"].Value = ПЕРЕМЕНАЯ[0];
//берем строку с удалением и указиваем какую строку удалить 0 значит первую
ПЕРЕМЕНАЯ.RemoveAt(0);
Зачем такая городьба? вашь вопрос решается в одну строку:
C#:
var ABC = project.Lists["Список"].GetItem("random", true);//берем случайную строку из списка с удалением этой строки
Советую почитать тут: https://zennolab.com/wiki/ru:ranges все что там написано НЕ русскими буквами можно вставить вместо "random" :-)

Удачи в изучении.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 183
Баллы
113
Код:
//Удаляем случайный элемент списка из диапазона от 0 до количества строк в списке
project.Lists["Aphoto"].RemoveAt(new Random().Next(0,project.Lists["Aphoto"].Count-1));
выложу может кому будет полезно

//Получаем случайнную строку
int rnd = new Random().Next(0, project.Lists["Список"].Count - 1);
var ПЕРЕМЕНАЯ = project.Lists["Список"][rnd];
// Указиваем переменую
project.Variables["ПЕРЕМЕНАЯ"].Value = ПЕРЕМЕНАЯ;
//Удаляем строку
project.Lists["Список"].RemoveAt(rnd);


и ещё один вариант Если хотите брать первую строку

//указиваем переменую и с каким списком работаем
var ПЕРЕМЕНАЯ = project.Lists["СПИСОК"];
//указиваем переменую и какую строку берем 0 значит первую
project.Variables["ПЕРЕМЕНАЯ"].Value = ПЕРЕМЕНАЯ[0];
//берем строку с удалением и указиваем какую строку удалить 0 значит первую
ПЕРЕМЕНАЯ.RemoveAt(0);
Ну что типо такого

Код:
//Получаем случайнную строку
int rnd = new Random().Next(0, project.Lists["Список 1"].Count - 1);
var ListItem = project.Lists["Список 1"][rnd];

//Удаляем строку
project.Lists["Список 1"].RemoveAt(rnd);

return ListItem;
Парни, исправьте свои посты, а то новички скопируют по неопытности. Все трое в один класс ходили ? :-). Замените в своих шабах везде:
Код:
Count - 1
на
Код:
Count
Ибо в результат рандома никогда не входит верхняя граница. То есть:
Код:
 int rnd = new Random().Next(0, 1);
всегда вернет "0".
 
  • Спасибо
Реакции: Reysh

b1zar

Client
Регистрация
29.06.2019
Сообщения
107
Благодарностей
66
Баллы
28
Парни, исправьте свои посты, а то новички скопируют по неопытности. Все трое в один класс ходили ? :-). Замените в своих шабах везде:
Код:
Count - 1
на
Код:
Count
Ибо в результат рандома никогда не входит верхняя граница. То есть:
Код:
 int rnd = new Random().Next(0, 1);
всегда вернет "0".
Да ты прав, что то не обратил внимание, т.к. с рандомами редко работаю. Но ошибки тут нет, он отработает правильно, просто лишних два символа:-)
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 183
Баллы
113
Да ты прав, что то не обратил внимание, т.к. с рандомами редко работаю. Но ошибки тут нет, он отработает правильно, просто лишних два символа:-)
В смысле 2 символа? Я не о том чтобы пробелы убрать. Я о том что не надо там декремент вообще делать. То есть уменьшать не надо ничего.
 
  • Спасибо
Реакции: kapelan28 и Lord_Alfred

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 866
Баллы
113
А ещё лучше делать вот так, чтоб вообще исключить возможность ошибки:
C#:
int random_number = new Random().Next(project.Lists["Aphoto"].Count);
 
  • Спасибо
Реакции: Mikhail B., Koqpe и orka13

Master4eg

Client
Регистрация
06.04.2016
Сообщения
421
Благодарностей
122
Баллы
43
Интересные решения тут, где вы были раньше)
 
  • Спасибо
Реакции: RazDvaTri

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 410
Благодарностей
5 454
Баллы
113
исправьте свои посты
Посты исправлил сам. Спасибо за уточнение. Код лорда крутой, но для новичка слишком крут. Удобнее использовать такой)
Код:
//Получаем случайнную строку
int rnd = new Random().Next(0, project.Lists["Список 1"].Count);
var ListItem = project.Lists["Список 1"][rnd];

//Удаляем строку
project.Lists["Список 1"].RemoveAt(rnd);

return ListItem;
 
  • Спасибо
Реакции: Rafa

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 410
Благодарностей
5 454
Баллы
113
Накатал такой сниппет себе. поделюсь)
(Спасибо @Саня за основу, и остальных за советы.)

Цель: Брать по очереди или случайно, с удалением или без. Все в одном коде, переменные можно вписать во входные настройки. Могу скинуть шаблон если лень копировать)

Списки:
ФОТО ТОП - откуда берем значения

Перемененные проекта:
PHOTO_RANDOM - принимает значения Случайно и По очереди, соответственно таким образом и берутся строки.
PHOTO_DELETE - принимает значения Да и Нет, соответственно удаляем или не удаляем полученную строку

Переменные кода:
file_photo - строка со списка

Для корректных оповещений:
(спасибо @djaga за разъяснения по оповещениям)

Нужно добавить в Using'и одну строчку с enums: ↓
Using'и в "Директивы using":
using ZennoLab.InterfacesLibrary.Enums.Log;
Оповещения видны только в логе PM.

Код:
C#:
IZennoList PHOTO = project.Lists["ФОТО ТОП"]; //Привязываемся к списку
if (PHOTO.Count == 0) // Проверяем список на пустоту
return "ФОТО ТОП - 0 СТРОК"; //Возвращаем ответ если список пуст

if (project.Variables["PHOTO_RANDOM"].Value == "Случайно")  //Режим получения строк "Случайно"
{
    //оповещение
    project.SendToLog("Режим получения строк: Случайно", LogType.Info, false, LogColor.Yellow);

    // Получаем случайную строку. Назначем в переменную кода. Оповещение.
    int rnd = new Random().Next(0, project.Lists["ФОТО ТОП"].Count );
    var file_photo = project.Lists["ФОТО ТОП"][rnd];
    project.SendToLog("Получили случайную строку" + "\r\n" + file_photo, LogType.Info, false, LogColor.Yellow);

    //Назначаем строку из списка в переменную проекта
    project.Variables["file_photo"].Value = file_photo;

            if (project.Variables["PHOTO_DELETE"].Value == "Да") //Удалить строку?
        {
            //Удаляем полученную строку. Оповещение.
            project.Lists["ФОТО ТОП"].RemoveAt(rnd);
            project.SendToLog("Удалили полученную строку" + "\r\n" + file_photo, LogType.Info, false, LogColor.Yellow);
        }

}
else if (project.Variables["PHOTO_RANDOM"].Value == "По очереди") //Режим получения строк "По очереди"
    {
        //оповещение
        project.SendToLog("Режим получения строк: По очереди", LogType.Info, false, LogColor.Yellow);
   
        // Получаем первую строку. Назначем в переменную проекта. Оповещение.
        var file_photo = project.Lists["ФОТО ТОП"][0];
        project.SendToLog("Получили первую строку" + "\r\n" + file_photo, LogType.Info, false, LogColor.Yellow);
   
   
        //Назначаем строку из списка в переменную проекта
        project.Variables["file_photo"].Value = file_photo;
   
            if (project.Variables["PHOTO_DELETE"].Value == "Да") //Удалить строку?
        {
            //Удаляем полученную строку. Оповещение.
            project.Lists["ФОТО ТОП"].RemoveAt(0);
            project.SendToLog("Удалили полученную строку" + "\r\n" + file_photo, LogType.Info, false, LogColor.Yellow);
        }
    }
 
Последнее редактирование:
  • Спасибо
Реакции: djaga

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