我知道我的代码是否有更好的解决方案。该方法将包含大约1000个2000链接对象的List作为参数。我需要通过id解析它们,键入并返回一个列表,其中包含来自id 1的4个链接,来自id2的2个元素...等等...
更新: 每次调用此方法时,我只需要获得10 15个元素。 1000是min,2000是response3可以包含的最大数字。
// response包含从a获取的1000个2000链接的列表 // httpwebRequest并从XML Document网页获取数据并将其解析为列表
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;
}