如何从列表中获取最多10个随机项?

时间:2012-02-13 04:21:12

标签: c#

我有一个列表可以有不同数量的项目(但不超过~30这里没有性能问题),我想获得最多10个随机项目,我写了一段代码,如果工作正常,如果列表中有10多个项目。以下代码的问题是,如果列表中的项目少于10个,并且如果少于10个项目我想以随机顺序显示它们,它显然不会随机化结果。

var keyPersons = people.ToList();
Random rnd = new Random();
while (keyPersons.Count() > 10)
{
    int j = rnd.Next(0, keyPersons.Count());
    keyPersons.RemoveAt(j);
}

rptKeyPersons.DataSource = keyPersons;

如果在人员列表中只有五个项目,我该如何随机化结果?

提前致谢。

2 个答案:

答案 0 :(得分:4)

如果评论中说明您需要随机排序,则可以执行列表的随机播放,然后按顺序执行 n 项。请注意,即使您的列表包含超过10个项目,您的方法仍然不会将这些结果随机化,而不是在随机点消除元素。剩下的元素仍然是原来的顺序。这将解决这两个问题。

给出

public static void Shuffle<T>(IList<T> list)
{
    var random = new Random();
    for (int index = list.Count - 1; index >= 1; index--)
    {
        int other = random.Next(0, index + 1);
        T temp = list[index];
        list[index] = list[other];
        list[other] = temp;
    }
}

你可以

var keyPersons = people.ToList();  
Shuffle(keyPersons);  
rptKeyPersons.DataSource = keyPersons.Take(10);

Take将选择新洗牌序列中的前10个项目。如果存在的数量少于10,则只需要尽可能多的数量。

答案 1 :(得分:0)

我喜欢Anthonies解决方案,但它可以像这样简单。

var keyPersons = people.OrderBy(x => Guid.NewId()).ToList()
rptKeyPersons.DataSource = keyPersons.Take(10);