C#中怎样将数组的顺序打乱随机排序
程序员文章站
2022-05-31 10:26:28
场景 在ZedGraph随机生成颜色时需要从颜色数组中取颜色对象。 Color数组存取的是System.Drawing.Color的颜色。 其顺序是相邻的颜色,颜色差距不大,在取颜色时按顺序取颜色时,如果颜色条数比较少,差距会不明显。 需要将此数组的顺序打乱,随机进行排序。 注: 博客主页: htt ......
场景
在zedgraph随机生成颜色时需要从颜色数组中取颜色对象。
color数组存取的是system.drawing.color的颜色。
其顺序是相邻的颜色,颜色差距不大,在取颜色时按顺序取颜色时,如果颜色条数比较少,差距会不明显。
需要将此数组的顺序打乱,随机进行排序。
注:
博客主页:
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载
实现
首先附从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; }
这里根据需要修改为自己需要的对象,获取将其直接改为泛型。
上一篇: PHP操作数组的一些函数整理介绍