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;

        }

這里根據需要修改為自己需要的對象,獲取將其直接改為泛型。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM