如何将一个数组打乱呢?请看如下代码,方便的实现。
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;
}