c# - 生成指定数量的随机但独特的颜色

标签 c# arrays random colors unique

我想做的是给我的listView中的每个项目都有一个独特的颜色。所以我的 ListView 中的项目数为“计数”

我的方法是调用下面的方法并给出我的项目的方法编号,然后它应该有一个保存第一个颜色的数组,然后当要生成下一个颜色时,应该将其与之前的颜色进行比较在数组中。

问题是我无法弄清楚我需要哪种数组以及如何将数组中每个插入的颜色与最后插入的颜色进行比较。这是我的代码:

public Color GetUniqueRandomColor(int count){

for(int i = 0; i < count; i++)
{
Color.FromArgb(randomColor.Next(70, 200), randomColor.Next(100, 225), randomColor.Next(100, 230));
}

return Color.Red;}

这是元素在数组中的外观:

Color [A=255, R=132, G=148, B=181]

如您所见,我的方法仍然缺少所需的数组以及将新插入的颜色与其进行比较的算法。我们将提供一些帮助和提示!

最佳答案

使用 C# 3.5

public static Color[] GetUniqueRandomColor(int count)
{
    Color[] colors = new Color[count];
    HashSet<Color> hs = new HashSet<Color>();

    Random randomColor = new Random();

    for(int i = 0; i < count; i++)
    {
        Color color;
        while (!hs.Add(color = Color.FromArgb(randomColor.Next(70, 200), randomColor.Next(100, 225), randomColor.Next(100, 230))));
        colors[i] = color;
    }    

    return colors;
}

如果你只有C# 2.0,你可以用Dictionary替代HashSet,其中bool只是一个你不会使用的占位符,但while表达式会变得更复杂一点

public static Color[] GetUniqueRandomColor(int count)
{
    Color[] colors = new Color[count];
    Dictionary<Color, bool> hs = new Dictionary<Color, bool>();

    Random randomColor = new Random();

    for (int i = 0; i < count; i++)
    {
        Color color;
        while (hs.ContainsKey(color = Color.FromArgb(randomColor.Next(70, 200), randomColor.Next(100, 225), randomColor.Next(100, 230)))) ;
        hs.Add(color, true);
        colors[i] = color;
    }

    return colors;
}

关于c# - 生成指定数量的随机但独特的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5361838/

相关文章:

C# 电子邮件地址验证

php - Laravel Excel : CSV to Array

c++ - 从包含 n 个元素的 vector 中随机选择 m 个元素

string - 在 Golang 中生成固定长度的随机十六进制字符串的有效方法?

python - 生成给定范围内的随机时间戳?

c# - VS2008 单元测试 - 断言方法退出

c# - 等待 WebBrowser 完成加载时 Application.DoEvents() 出现问题

c# - Util.CreateAppDomain 在 LINQPad 中失败

java - 在数组中查找连续数字组

c# - 如何删除数组中的选定元素?