2015-08-16 81 views
1

我有以下一段代碼:列表<T>獲得隨機元素不起作用

private Random r = new Random(); 

    private List<T> RandomElement<T>(IQueryable<T> list, Expression<Func<T, bool>> e, int items = 3) 
    { 
     list = list.Where(e); 
     return list.Skip(r.Next(list.Count())).Take(items).ToList(); 
    }  

問題是,當我把它,並希望例如從列表中返回3級隨機的物品,有時會返回3有時2,有時1?

我想隨時得到3.

我在做什麼錯了?

+0

,顧名思義,*跳過*跳過n個元素,這意味着它可以跳過在列表​​中你看了關於'漁民耶茨shuffle' :)所有元素?如果不是,Google會閱讀第一個結果。 – Eser

+0

感謝您的信息。其實從來沒有聽說過它,但我會給它一個閱讀。 – user2818430

回答

0

如果您的列表中有10個元素,並且您要求3個「隨機」項目,則在您的解決方案中,如果隨機數生成器返回8,則跳過前8個元素,並且它只有2個項目可供返回項目9和10)。這就是它發生的原因。

如果你想要隨機項目,而不是隨機洗牌列表,不要跳過任何,只需要你想要的數字。

Randomize a List<T>

+1

'如果你想要隨機項目,而不是洗牌列表',那麼接受的答案就會在你的鏈接中使用* fisher yates shuffle * – Eser