Получить случайный элемент из другого списка .net - PullRequest
0 голосов
/ 25 января 2012

я бы знал, есть ли лучшее решение для моего кода. Метод принимает в качестве параметра List, содержащий около 1000 2000 Link Object. Мне нужно разобрать их по id, набрать и вернуть список, который содержит 4 ссылки с id 1, 2 элемента с id2 ... и т.д ...

  1. Мой код ниже, может быть, это очень плохой код ... Есть ли способ написать лучше с меньшим списком, который использует столько памяти?
  2. Другой вопрос: список response3, который я отправил в GetList, так как я сказал, содержит 1000 2000 объектов и я храню в памяти, потому что мне нужно это на всю жизнь программы, и я использую его примерно каждые 100 секунд. По вашему мнению, я должен хранить в памяти или сохранить в файл и читать каждые 100 секунд?

Обновление: За каждый раз, когда я вызываю этот метод, мне нужно получить только 10 15 элементов. 1000 - это минимальное, а 2000 - максимальное значение, которое может содержать response3.

// ответ содержит список из 1000 2000 ссылок, взятых из // httpwebRequest и получить данные с веб-страницы XML-документа и разобрать их в список

public List<MainForm.Links> GetList(List<Links> response3)
{                
    listGoogle.Clear();
    listYahoo.Clear();
    listBing.Clear();
    listOther.Clear();
    //Other 4        
    var rnd = new Random();
    var q = from a in response3.GroupBy(l => new { l.idHost, l.Type })  
            let col = a.ToList()
            select col[rnd.Next(0, col.Count)];

    foreach (Links str in q)
    {
        switch (str.idHost)
        {
            case 0: 
                listGoogle.Add(str);
                break;
            case 1: 
                listYahoo.Add(str);
                break;
            case 2: 
                listBing.Add(str);
                break;
            case 3 
                listOther.Add(str);
                break; 
            //Other 4 list 
        } 
    }

    var google = listGoogle.OrderBy(x => rnd.Next()).Take(4);
    var yahoo = listYahoo.OrderBy(x => rnd.Next()).Take(2);
    var Bing = listBing.OrderBy(x => rnd.Next()).Take(1);
    var otherSeacher = listOtherSeacher.OrderBy(x => rnd.Next()).Take(1);
    //Other same 4  

    tmp.Clear();
    tmp = google.Where(h => h != null).ToList();
    tmp.AddRange(yahoo.Where(h => h != null));
    tmp.AddRange(bing.Where(h => h != null));
    tmp.AddRange(other.Where(h => h != null)); 
    .....other 4     
    return tmp;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...