c# - 来自阵列的随机图像而不重复

标签 c#

使用:

Image[] icons = { image12, image9, image11, image12, image10, image9, image11, image1,  image12, image9, image11, image10, image12, image9, image10, image11, image9, image10, image12, image11 };
    for (int i = 0; i < 20; i++)
    {
        newicon[i] = icons[rnd.Next(0, 19)];
    }

我试图获取“图标”列表并在不重复的情况下将它们打乱

基本上我需要 1 个 image1、5 个 image9、4 个 image10、5 个 image11 和 5 个 image12 的输出,但每个不超过该数量。我尝试过的所有操作都以更多其他图像结束,没有 image1 或多个 image1。

我已经用数字完成了这个,这往往不是问题,但我无法弄清楚图像。此外,我无法在不重复的情况下在列表中找到任何关于洗牌图像的内容。

最佳答案

为什么不直接打乱数组然后遍历它呢?这很简单;这是 Fisher-Yates shuffle 的一个实现, 它只通过一次就打乱了数组:

void Shuffle(Images[] images) {
   for (int i = 0; i < images.Length - 1; i++) {
      int j = rnd.Next(i, images.Length);
      Image temp = images[j];
      images[j] = images[i];
      images[i] = temp;
   }
}

然后只需调用Shuffle 并遍历数组

Images[] icons = { ... };
Shuffle(icons);
for (int i = 0; i < 20; i++)
   newicon[i] = icons[i];

关于c# - 来自阵列的随机图像而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16828043/

相关文章:

c# - 更新 Azure Blob 上的 LastModified

c# - 动态选择和更新 LINQ 结果集中的列值

c# - 新的 ReSharper Equals() 和 GetHashCode() 代码生成方法

C#:如何实现和使用 NotNull 和 CanBeNull 属性

c# - 如何将值添加到数据表C#中的特定列和行的值

c# - MVC 4 - 验证码.Mvc

C# SQL 查询产生与 Management Studio 不同的结果

c# - ApplicationBase 之外的 PrivateBinPath

C# 随 secret 码生成器

c# - 尽管解析字节数据时出错,如何继续循环