从数组获取不同ID对象的随机对象C#
问题描述:
我有一个对象(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的。
这有可能吗?我现在尝试没有任何结果。
答
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)
感谢我要去试试吧! – Jasper
它很好用。我会问你另一个想法。如果我有inObjectRandom另一个字段喜欢类型,我会采取For Each ID 1值类型。所以我可以从同一个用户得到2个结果,可能吗?或者我必须为每种类型创建更多列表,以便我可以将此算法与不同列表一起使用? – Jasper
我不确定你的意思。但是,您可以将ID和类型分组。 'list.GroupBy(l => new {l.id,l.Type})' – Magnus