2011-11-21 124 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