c# - 如何在将相等的值分组在一起时对数组进行洗牌?
问题描述
假设我有一个这样的数组。
int[] arr = {1,2,3,4,4,5,6,7,8,8,8,1};
我如何洗牌,但所有的值都相等?
洗牌后的示例预期输出:
3,1,1,8,8,8,7,2,4,4,6,5
解决方案
你可以这样做:
- 找出数组中的唯一值以及每个值出现的次数。将计数存储在字典中,例如
counts
。 - 使用诸如 Fisher-Yates 之类的洗牌算法对唯一值进行洗牌。
v
对于混洗数组中的每个值,写入v
输出数组counts[v]
次。
推荐阅读
- php - Laravel:更新模型的时间戳而不保存其他属性
- flutter - 如何在 Flutter 上从 API Server 制作弹出错误消息?
- powershell - Github Actions 输出文本颜色
- angular - Angular 8 到 Angular 9 的迁移问题
- json - 使用 Powershell 将字符串转换为 JSON 再转换为字符串并再次转换为 JSON
- java - 以 {[]} 格式从泛型类型获取数据
- c# - 从 foreach 循环生成多个 word 文档
- javascript - 在php中上传和显示图像
- python - 如何使用 exec() 更改 json?
- pandas - 如何检查特定列是否在数据框中具有特定值?