2011-11-21 134 views
0

我有一个对象(C#)的ArrayList。 每个对象都有ID和一个值。从数组获取不同ID对象的随机对象C#

我需要为每个ID获取1个随机对象。

对象类是建立在这样

public class ObjectRandom 
{ 
    int32 id { get; set; } 
    string value { get; set;} 
} 

对于实施例此ArrayList具有6000 ObjectRandom。

ID的可以是连续的或不连续的。

所以如果有500个对象为每个用户,这意味着有12个用户。 (ID1,ID2,ID5,ID10,ID11,ID15 ID22等)。

我会采取从ArrayList中(即得到了所有6000个对象)只有 ObjectRandom 每个ID的。

这有可能吗?我现在尝试没有任何结果。

回答

0
void Main() 
{ 
    var list = new List<ObjectRandom>() 
    { 
     new ObjectRandom(){ id = 1, value = "a"}, 
     new ObjectRandom(){ id = 2, value = "b"}, 
     new ObjectRandom(){ id = 3, value = "c"}, 
     new ObjectRandom(){ id = 1, value = "d"}, 
     new ObjectRandom(){ id = 2, value = "e"}, 
     new ObjectRandom(){ id = 3, value = "f"}, 
    }; 
    var rnd = new Random(); 
    var q = from a in list.GroupBy (l => l.id) 
      let col = a.ToList() 
      select col[rnd.Next(0, col.Count)]; 
} 

public class ObjectRandom 
{ 
    public int id { get; set; } 
    public string value { get; set;} 
} 

如果需要使用ArrayList,而不是一个泛型列表使用:

from a in list.Cast<ObjectRandom>().GroupBy (l => l.id) 
+0

感谢我要去试试吧! – Jasper

+0

它很好用。我会问你另一个想法。如果我有inObjectRandom另一个字段喜欢类型,我会采取For Each ID 1值类型。所以我可以从同一个用户得到2个结果,可能吗?或者我必须为每种类型创建更多列表,以便我可以将此算法与不同列表一起使用? – Jasper

+0

我不确定你的意思。但是,您可以将ID和类型分组。 'list.GroupBy(l => new {l.id,l.Type})' – Magnus