欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#中怎样将数组的顺序打乱随机排序

程序员文章站 2023-01-30 08:39:13
场景 在ZedGraph随机生成颜色时需要从颜色数组中取颜色对象。 Color数组存取的是System.Drawing.Color的颜色。 其顺序是相邻的颜色,颜色差距不大,在取颜色时按顺序取颜色时,如果颜色条数比较少,差距会不明显。 需要将此数组的顺序打乱,随机进行排序。 注: 博客主页: htt ......

场景

在zedgraph随机生成颜色时需要从颜色数组中取颜色对象。

color数组存取的是system.drawing.color的颜色。

其顺序是相邻的颜色,颜色差距不大,在取颜色时按顺序取颜色时,如果颜色条数比较少,差距会不明显。

C#中怎样将数组的顺序打乱随机排序

 

 

C#中怎样将数组的顺序打乱随机排序

需要将此数组的顺序打乱,随机进行排序。

注:

博客主页:

关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载

实现

首先附从system.drawing.color中获取所有color对象

//用于存取取出的颜色对象 
list<color> colorlist = new list<color>(); 
//通过getmember获取所有的公共成员 
foreach (var item in typeof(color).getmembers()) 
      { 
       //只取属性且为属性中的已知color,剔除byte属性以及一些布尔属性等(a b g r isknowncolor name等) 
          if (item.membertype == system.reflection.membertypes.property && system.drawing.color.fromname

(item.name).isknowncolor == true) 
              { 
                  color color = system.drawing.color.fromname(item.name); 
                  colorlist.add(color);
               } 
        } 
//转成数组 
color[] colors = colorlist.toarray();

然后进行随机打乱顺序排序

colors = getdisrupteditems(colors);

调用乱序方法

private static color[] getdisrupteditems(color[] colors)
        {
            //生成一个新数组:用于在之上计算和返回
            color[] temp;
            temp = new color[colors.length];
            for (int i = 0; i < temp.length; i++) 
            { 
                temp[i] = colors[i];
            }

            //打乱数组中元素顺序
            random rand = new random(datetime.now.millisecond);
            for (int i = 0; i < temp.length; i++)
            {
                int x, y; color t;
                x = rand.next(0, temp.length);
                do
                {
                    y = rand.next(0, temp.length);
                } while (y == x);

                t = temp[x];
                temp[x] = temp[y];
                temp[y] = t;
            }

            return temp;

        }

这里根据需要修改为自己需要的对象,获取将其直接改为泛型。