如何将一个数组打乱呢?

如何将一个数组打乱呢?请看如下代码,方便的实现。

        private void Test()
        {
            var array 
= new[] {12345678910};
            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;
        }


 

posted @ 2010-03-09 17:04  wenanry  阅读(3551)  评论(0编辑  收藏  举报