假设我有一个这样的数组。
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]
次
var rng = new Random();
arr = arr
.GroupBy(i => i)
.OrderBy(g => rnd.Next())
.SelectMany(g => g)
.ToArray();