c# - 随机化一个数组,同时保留特定元素?

标签 c# arrays random shuffle

简单的问题,我的逻辑中有些东西不合逻辑。基本上我想对数组进行洗牌或随机化,但将特定元素保留在适当的位置。任何超过 900 的东西都应该保持在相同的位置。这看起来应该可行,但显然我错过了一些东西。

public static int[] ShuffleArray(int[] data)
{
    for (int t = 0; t < data.Length; t++)
    {
        int tmp = data[t];
        if (tmp < 900)
        {
            int r;
            do
            {
                r = (int)RandomBetween(t, data.Length);
            } while (r > 900);

            data[t] = data[r];
            data[r] = tmp;
        }
    }

    return data;
}

输入:

0,0,1,1,2,2,3,
3,999,4,5,1,999,6,
0,0,1,999,2,2,3,
3,4,4,5,5,6,6,
0,999,1,1,999,999,3,
3,4,4,5,5,6,6,
0,0,1,1,2,2,3,

得到这个:

3,5,6,2,6,1,0,
999,999,3,3,5,999,6,
2,4,999,1,999,2,4,
5,2,0,999,2,1,3,
0,1,5,6,2,0,4,
0,0,4,3,6,0,3,
1,1,5,4,3,1,1,

我以为我用 <900 和 do while 捕获了它......我在这里错过了什么? 999 需要留在原地。

最佳答案

您的逻辑不正确,因为您使用 r 作为索引。


更改此:

while (r > 900)

对此:

while (data[r] > 900)

请注意,您的算法本身效率极低。

关于c# - 随机化一个数组,同时保留特定元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29999110/

相关文章:

c# - LibUsbDotNet 调用 UsbDevice.AllDevices 时找不到设备

c# - 如何使用 "current"值绑定(bind)到 WPF 中的枚举

php - 获取 URL 中正斜杠之间的变量

javascript - js平面数组到多级数组

arrays - 如何取消引用这个数组?我如何将这个数组存储到散列中?

c - `clear` 导致 undefined reference 错误

c# - 将已构建的 WinForms.Form 实例序列化为 VB 或 C# 源代码,就像 IDE 一样

c# - 在 int 数组中查找第 n 个最大的

java - 需要将整个事情放在一个循环中,哪个循环最适合?我应该在哪里应用它?

javascript - D3 条形图未填充。