0

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

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
4

2 回答 2

1

你可以这样做:

  • 找出数组中的唯一值以及每个值出现的次数。将计数存储在字典中,例如counts
  • 使用诸如 Fisher-Yates 之类的洗牌算法对唯一值进行洗牌。
  • v对于混洗数组中的每个值,写入v输出数组counts[v]次。
于 2021-07-06T02:52:13.320 回答
0
var rng = new Random();    
arr = arr
    .GroupBy(i => i)
    .OrderBy(g => rnd.Next())
    .SelectMany(g => g)
    .ToArray();
于 2021-07-06T02:40:08.020 回答