如何在将相等的值分组在一起时打乱数组



假设我有一个这样的数组。

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();

相关内容

  • 没有找到相关文章

最新更新