прошу дополнить С# код

malina83

Client
Регистрация
14.11.2016
Сообщения
24
Благодарностей
0
Баллы
1
доброго времени всем! нашёл здесь же на форуме такой вот C# код по работе с файлом текста. хотел бы попросить знающих людей дополнить его. данный код дёргает одну строку из списка, а можно ли дополнить его чтобы была возможность дергать, ну скажем от 1 до 100 ?


var list = project.Lists["List"];
Random rnd = new Random();
lock (SyncObjects.ListSyncer) {
int r = rnd.Next(list.Count);
project.Variables["Var"].Value = list[r];
}


спасибо!
 

oOmp

Client
Регистрация
22.01.2018
Сообщения
197
Благодарностей
86
Баллы
28
var list = project.Lists["list"].ToList();
list.Shuffle();
Random random = new Random();
int rnd = random.Next(1, 100);
return string.Join("\r\n", list.Take(rnd));
 
  • Спасибо
Реакции: Igorii

malina83

Client
Регистрация
14.11.2016
Сообщения
24
Благодарностей
0
Баллы
1
спасибо огромное! то что нужно
var list = project.Lists["list"].ToList();
list.Shuffle();
Random random = new Random();
int rnd = random.Next(1, 100);
return string.Join("\r\n", list.Take(rnd));

спасибо огромное, то что нужно!
 

Igorii

Client
Регистрация
21.02.2015
Сообщения
369
Благодарностей
292
Баллы
63

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 169
Баллы
113
А можно, что бы брал с удалением?
Тогда логику по другому надо строить, через цикл:
C#:
var list = project.Lists["List"];
List<string> list_Temp = new List<string>();
Random rnd = new Random();
//указываем нужное количество строк в диапазоне от и до:
int rnd1 = rnd.Next(1, 100);
int rnd2 = 0;

lock (SyncObjects.ListSyncer) {
    // в цикле дергаем случайные строчки из списка нужное количество раз во временный список:
    for (int i = 0; i < rnd1; i++) {  
            rnd2 = rnd.Next(0, list.Count);
            project.SendInfoToLog(rnd2.ToString());
        try {
            list_Temp.Add(list[rnd2]);  
        }
        catch {
            // выходим из цикла преждевременно если строки в списке кончились быстрее (мы задали слишком большой диапазон, а список мелкий)
            break;
        }
            // и удаляем строку из оригинального списка:
        list.RemoveAt(rnd2);      
    }
}
// возвращаем содержимое временного списка:
return string.Join("\r\n", list_Temp);
 
Последнее редактирование:
  • Спасибо
Реакции: oOmp и Igorii

Igorii

Client
Регистрация
21.02.2015
Сообщения
369
Благодарностей
292
Баллы
63
Тогда логику по другому надо строить, через цикл:
C#:
var list = project.Lists["List"];
List<string> list_Temp = new List<string>();
Random rnd = new Random();
int rnd1 = rnd.Next(222, 222);
int rnd2 = 0;

lock (SyncObjects.ListSyncer) {
    // в цикле дергаем случайные строчки из списка нужное количество раз во временный список:
    for (int i = 0; i < rnd1; i++) {   
            rnd2 = rnd.Next(0, list.Count);
            project.SendInfoToLog(rnd2.ToString());
        try {
            list_Temp.Add(list[rnd2]);   
        }
        catch {
            // выходим из цикла преждевременно если строки в списке кончились быстрее (мы задали слишком большой диапазон, а список мелкий)
            break;
        }
            // и удаляем строку из оригинального списка:
        list.RemoveAt(rnd2);       
    }
}
// возвращаем содержимое временного списка:
return string.Join("\r\n", list_Temp);
Работает! Спасибо!!! Было бы ещё классно, если бы выходил по красной, когда закончились строки в списке
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 169
Баллы
113
Работает! Спасибо!!! Было бы ещё классно, если бы выходил по красной, когда закончились строки в списке
Тогда вместо:
C#:
        try {
            list_Temp.Add(list[rnd2]); 
        }
        catch {
            // выходим из цикла преждевременно если строки в списке кончились быстрее (мы задали слишком большой диапазон, а список мелкий)
            break;
        }
Оставить просто:
C#:
list_Temp.Add(list[rnd2]);
И оно само по ошибке выйдет, если строк не хватит.
 
  • Спасибо
Реакции: Igorii

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