马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

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

[复制链接]
查看919 | 回复1 | 2019-12-26 09:05:25 | 显示全部楼层 |阅读模式

场景

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

Color数组存取的是System.Drawing.Color的颜色。

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

090949ap3333a9ca2phpyh.jpg

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

博客主页:
https://blog.csdn.net/badao_liumang_qizhi

实现

起首附从System.Drawing.Color中获取全部Color对象

  1. //用于存取取出的颜色对象
  2. List<Color> colorList = new List<Color>();
  3. //通过GetMember获取全部的公共成员
  4. foreach (var item in typeof(Color).GetMembers())
  5. {
  6. //只取属性且为属性中的已知Color,剔除byte属性以及一些布尔属性等(A B G R IsKnownColor Name等)
  7. if (item.MemberType == System.Reflection.MemberTypes.Property && System.Drawing.Color.FromName
  8. (item.Name).IsKnownColor == true)
  9. {
  10. Color color = System.Drawing.Color.FromName(item.Name);
  11. colorList.Add(color);
  12. }
  13. }
  14. //转成数组
  15. Color[] colors = colorList.ToArray();
复制代码

然后举行随机打乱序次排序

  1. colors = GetDisruptedItems(colors);
复制代码

调用乱序方法

  1. private static Color[] GetDisruptedItems(Color[] colors)
  2. {
  3. //天生一个新数组:用于在之上盘算和返回
  4. Color[] temp;
  5. temp = new Color[colors.Length];
  6. for (int i = 0; i < temp.Length; i++)
  7. {
  8. temp[i] = colors[i];
  9. }
  10. //打乱数组中元素序次
  11. Random rand = new Random(DateTime.Now.Millisecond);
  12. for (int i = 0; i < temp.Length; i++)
  13. {
  14. int x, y; Color t;
  15. x = rand.Next(0, temp.Length);
  16. do
  17. {
  18. y = rand.Next(0, temp.Length);
  19. } while (y == x);
  20. t = temp[x];
  21. temp[x] = temp[y];
  22. temp[y] = t;
  23. }
  24. return temp;
  25. }
复制代码

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

C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则