zoukankan      html  css  js  c++  java
  • C#中怎样将数组的顺序打乱随机排序

    场景

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

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

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

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

    注:

    博客主页:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载

    实现

    首先附从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;
    
            }

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

  • 相关阅读:
    在Windows环境中使用版本管理工具Git [转]
    poj3630 Phone List **
    UVa10382 Watering Grass **
    软件项目计划书格式 [转]
    POI2001 Ants and the ladybug ***
    RMQ+1/1算法 [转]
    poj3264 Balanced Lineup *
    Windows Server 2003 出现的Service Unavailable怎么办?
    单车环佛山一环
    天凉了,大家多穿衣服
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/12094855.html
Copyright © 2011-2022 走看看