在mvc中从列表中随机获取10个用户数据
本文关键字:10个 用户 用户数 获取 数据 随机 mvc 列表 | 更新日期: 2023-09-27 18:28:52
我有一个包含所有用户信息的对象列表。
List<UsrProfile> listUsr = GetAllUser();
在控制面板中,每次刷新页面时,我只需要从列表中随机显示10个用户配置文件。
我更喜欢使用LINQ,简短且可读性更强。
var r = new Random();
var tenRandomUser = listUsr.OrderBy(u => r.Next()).Take(10);
你可以用两种方式来做(好吧,也许更多,但我想到了两种)。一个是@wentimo所描述的。第二种方法是创建结果列表,并从源列表中随机选择,如果结果不存在,则添加结果:
这应该是你想要的:它创建了一个临时列表,以确保你不会随机选择一个你已经选择的重复列表,并假设该列表至少有10个元素。
Random rnd = new Random();
List<User> resultList = new List<User>();
while (resultList.Count < 10)
{
User u = listUsr[rnd.Next(listUsr.Count)];
if (!resultList.Contains(u))
{
resultList.Add(u);
}
}
你什么时候应该用哪种方式?若随机元素的数量远远小于源列表中的元素数量,则使用第二种方法。例如,如果您从100000个用户中选择10个,您很少会得到两次相同的用户,并且对于少量的元素,检查结果列表是否包含元素是很快的。
另一方面,您避免再创建一个包含100000个元素的列表。若随机元素的数量接近于源元素的数量,那个么就使用第一种方法,因为您经常会选择两次或多次相同的用户,resultList会检查更多元素的存在性。
另外,如果不确定源元素的数量和要获取的随机元素的数量之间的关系,请选择第一个(@wentimo的)解决方案。
这应该是你想要的:它会创建一个临时列表,以确保你不会随机选择已经选择的重复项,并假设该列表至少有10个元素。
Random rnd = new Random();
var tempList = new List<User>(listUsr);
int count = 10;
while (count > 0)
{
int r = rnd.Next(tempList.Count);
// Do whatever with tempList[r]
templist.RemoveAt(r);
count--;
}
您可以使用以下代码行-
listUsr.Take(10);