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

2024-03-26

我想做的是给 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;}

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

颜色[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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生成指定数量的随机但独特的颜色 的相关文章

随机推荐