c# - 创建重复的子数组并随机化顺序c#
问题描述
我正在从数据库中返回一个项目列表。列表包含 id、名字、姓氏、销售数量、收入美元等信息。
1 John James 431 213000
2 Scott Smith 301 43000
3 Jane Doe 431 300000
4 Tess Jones 431 14280
我的结果将包含如上所示的 4 行。我根据 #sales 值以降序排列我的行。如果 #sales 值相同,则我按 id 订购。所以订购后我的结果将如下所示:
3 Jane Doe 431 300000
1 John James 431 213000
4 Tess Jones 431 14280
2 Scott Smith 301 43000
现在我想随机化#sales 相同的行的顺序。我确信这意味着我可能不会使用 id 的顺序。
如何创建#sales 相同的结果子数组,然后随机化它们的顺序并将其插入原始数组?我这样做的主要原因是为我将显示的数据添加一些多样性,使其不一样,并让用户有机会以不同的顺序显示。
这就是我获取原始数据的方式:
results = results.OrderByDescending(x => Math.Max((uint)x.TotalSales, x.TotalRevenue))
.GroupBy(x => x.Id)
.Select(x => x.First()).ToList();
我相信我将按如下方式应用随机化部分:
var randomIndx= new Random(TotalSales).Next(100) % (#: will this be the number of duplicates?);
以便
我不知道如何把事情放在一起。非常感谢任何有用的提示。
解决方案
使用 将排序应用于您的集合Random
,这将随机播放结果。使用ThenBy
将确保条目仅在其上一级排序中被打乱(项目将在其相同的“NumOfSales”中打乱)。
例如,与类:
public class Employee
{
public int Id{get;set;}
public string Name{get;set;}
public int NumOfSales{get;set;}
public int Revenue{get;set;}
}
您的代码可能如下所示:
var originalEmployeeList = new List<Employee>()
{
new Employee { Id = 1, Name = "John James", NumOfSales = 431, Revenue = 213000 },
new Employee { Id = 2, Name = "Scott Smith", NumOfSales = 301, Revenue = 43000 },
new Employee { Id = 3, Name = "Jane Doe", NumOfSales = 431, Revenue = 300000 },
new Employee { Id = 4, Name = "Tess Jones", NumOfSales = 431, Revenue = 14280 },
};
var random = new Random();
var randomizedResults = originalEmployeeList
.OrderByDescending(x => x.NumOfSales)
.ThenBy(x => random.Next())
.ToList();
这里的关键是使用random.Next()
INSIDE a ThenBy
. 在此示例中,NumOfSales = 431 的人员将始终出现在 NumOfSales = 301 的人员之前,但相同 NumOfSales 中的人员列表将是随机的。
这是一个可运行的示例:https ://dotnetfiddle.net/W2ESGt
推荐阅读
- python - 每秒发送到 stackAPI 的请求数限制是多少?
- python-3.7 - 返回值与从定义的函数预测的不同
- node.js - 从 Express Server 下载 ReactJS 文件
- vue.js - 为什么 vuex-orm 在关系字段中返回 null?
- python - 为什么使用 GPU 时 SSD 在小图像上的推理时间比大图像长
- php - php问题,试图更改文件中的多个数字。Str_replace 替换所有内容直到最大
- r - 如何通过对 R 中的所有列和选择列求和来计算问卷总分和子分数?
- flutter - 为什么软件键盘会导致小部件在打开/关闭时重建?
- excel - 清除除第一个标题以外的列数据 |Excel|VBA|
- mongodb - 使用 mongodb 的多级 $group