如何将一个数组打乱呢?
如何将一个数组打乱呢?请看如下代码,方便的实现。
private void Test()
{
var array = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
array = (int[]) MixArray(array, typeof (int));
foreach (var i in array)
{
sb.Append(i + ",");
}
}
/// <summary>
/// 随机打乱数组中数据顺序
/// </summary>
/// <param name="arr">要处理的数组</param>
/// <param name="type">要处理的数组值类型</param>
/// <returns></returns>
public static Array MixArray(Array arr, Type type)
{
Array goal = Array.CreateInstance(type, arr.Length);
var rnd = new Random(); //实例化一个伪随机数生成器
for (int i = 0; i < arr.Length; i++)
{
//循环要处理的数组
//随机生成一个数组索引号,注意每循环一次,将范围缩小一个
int pos = rnd.Next(0, arr.Length - i - 1);
//将随机的索引号pos所在的值 赋给输出数组中的当前循环索引(i)
goal.SetValue(arr.GetValue(pos), i);
//由于每次循环,范围都缩小了一个,而在该范围外的一个值,可能会丢掉了。
//所以要将原数组pos位置的值更改为该范围外的那个值,当前位置的值已传给输出数组了
arr.SetValue(arr.GetValue(arr.Length - 1 - i), pos);
}
return goal;
}
{
var array = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
array = (int[]) MixArray(array, typeof (int));
foreach (var i in array)
{
sb.Append(i + ",");
}
}
/// <summary>
/// 随机打乱数组中数据顺序
/// </summary>
/// <param name="arr">要处理的数组</param>
/// <param name="type">要处理的数组值类型</param>
/// <returns></returns>
public static Array MixArray(Array arr, Type type)
{
Array goal = Array.CreateInstance(type, arr.Length);
var rnd = new Random(); //实例化一个伪随机数生成器
for (int i = 0; i < arr.Length; i++)
{
//循环要处理的数组
//随机生成一个数组索引号,注意每循环一次,将范围缩小一个
int pos = rnd.Next(0, arr.Length - i - 1);
//将随机的索引号pos所在的值 赋给输出数组中的当前循环索引(i)
goal.SetValue(arr.GetValue(pos), i);
//由于每次循环,范围都缩小了一个,而在该范围外的一个值,可能会丢掉了。
//所以要将原数组pos位置的值更改为该范围外的那个值,当前位置的值已传给输出数组了
arr.SetValue(arr.GetValue(arr.Length - 1 - i), pos);
}
return goal;
}