我有一个列表可以有不同数量的项目(但不超过~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;
如果在人员列表中只有五个项目,我该如何随机化结果?
提前致谢。
答案 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);