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

  • Автор темы Автор темы Арман
  • Дата начала Дата начала

Арман

Client
Регистрация
04.07.2019
Сообщения
137
Реакции
33
Баллы
28
Как получить случайную строку Списки C#
смотрел видео уроки там объясняется что 0 это первый
а как выбрать случайное и потом этот выбор удалить
project.Variables["Aphoto"].Value = Aphoto[0];
Aphoto.RemoveAt(0);
 
  • Оценить
Реакции: Reysh
Код:
Развернуть Свернуть Копировать
//Удаляем случайный элемент списка из диапазона от 0 до количества строк в списке
project.Lists["Aphoto"].RemoveAt(new Random().Next(0,project.Lists["Aphoto"].Count));
 
Последнее редактирование модератором:
  • Оценить
Реакции: Mikhail B. и Арман
Ну что типо такого

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

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

return ListItem;
 
Последнее редактирование модератором:
выложу может кому будет полезно

//Получаем случайнную строку
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
выложу может кому будет полезно

//Получаем случайнную строку
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:
 
А выше, разве не тоже самое? :ca:
Я просто ещё новичок и час наверное мучился не мог понять Как сохранить в переменную для опытного конечно всё уже понятно и в первом варианте
 
  • Оценить
Реакции: Reysh
Я просто ещё новичок и час наверное мучился не мог понять Как сохранить в переменную для опытного конечно всё уже понятно и в первом варианте
Почему не используешь стандартные кубики? Там есть эта функция
 
выложу может кому будет полезно

//Получаем случайнную строку
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" :)

Удачи в изучении.
 
Код:
Развернуть Свернуть Копировать
//Удаляем случайный элемент списка из диапазона от 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
Парни, исправьте свои посты, а то новички скопируют по неопытности. Все трое в один класс ходили ? :-). Замените в своих шабах везде:
Код:
Развернуть Свернуть Копировать
Count - 1
на
Код:
Развернуть Свернуть Копировать
Count
Ибо в результат рандома никогда не входит верхняя граница. То есть:
Код:
Развернуть Свернуть Копировать
 int rnd = new Random().Next(0, 1);
всегда вернет "0".

Да ты прав, что то не обратил внимание, т.к. с рандомами редко работаю. Но ошибки тут нет, он отработает правильно, просто лишних два символа:-)
 
Да ты прав, что то не обратил внимание, т.к. с рандомами редко работаю. Но ошибки тут нет, он отработает правильно, просто лишних два символа:-)
В смысле 2 символа? Я не о том чтобы пробелы убрать. Я о том что не надо там декремент вообще делать. То есть уменьшать не надо ничего.
 
  • Оценить
Реакции: kapelan28 и Lord_Alfred
А ещё лучше делать вот так, чтоб вообще исключить возможность ошибки:
C#:
Развернуть Свернуть Копировать
int random_number = new Random().Next(project.Lists["Aphoto"].Count);
 
  • Оценить
Реакции: Mikhail B., Koqpe и orka13
исправьте свои посты
Посты исправлил сам. Спасибо за уточнение. Код лорда крутой, но для новичка слишком крут. Удобнее использовать такой)
Код:
Развернуть Свернуть Копировать
//Получаем случайнную строку
int rnd = new Random().Next(0, project.Lists["Список 1"].Count);
var ListItem = project.Lists["Список 1"][rnd];

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

return ListItem;
 
  • Оценить
Реакции: Rafa
Накатал такой сниппет себе. поделюсь)
(Спасибо @Саня за основу, и остальных за советы.)

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

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

Перемененные проекта:
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

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