如何从列表中获得最多10个随机项目

本文关键字:10个 随机 项目 列表 | 更新日期: 2023-09-27 18:24:34

我有一个列表,可以有可变数量的项目(但不超过~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;

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

提前谢谢。

如何从列表中获得最多10个随机项目

如果注释中澄清了您需要随机排序,您可以对列表进行洗牌,然后只需按顺序排列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);

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

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

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