场景

在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;

}

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