//从一个给定的数组arr中,随机返回num个不重复项
function getArrayItems(arr:Array, num:Number):Array {
    //新建一个数组,将传入的数组复制过来,用于运算,而不要直接操作传入的数组;
    var temp_array:Array = new Array();
    for (var index in arr) {
        temp_array.push(arr[index]);
    }
    //取出的数值项,保存在此数组
    var return_array:Array = new Array();
    for (var i = 0; i<num; i++) {
        //判断如果数组还有可以取出的元素,以防下标越界
        if (temp_array.length>0) {
            //在数组中产生一个随机索引
            var arrIndex:Number = Math.floor(Math.random()*temp_array.length);
            //将此随机索引的对应的数组元素值复制出来
            return_array[i] = temp_array[arrIndex];
            //然后删掉此索引的数组元素,这时候temp_array变为新的数组
            temp_array.splice(arrIndex, 1);
        } else {
            //数组中数据项取完后,退出循环,比如数组本来只有10项,但要求取出20项.
            break;
        }
    }
    return return_array;
}
//测试
var my_array:Array = new Array();
for (var i = 0; i<20; i++) {
    my_array[i] = "Num:"+i;
}
my_array = getArrayItems(my_array, 5);
for (var i = 0; i<my_array.length; i++) {
    trace(my_array[i]);
}


JavaScript代码,和AS类似:

<script language="javascript">
//从一个给定的数组arr中,随机返回num个不重复项
function getArrayItems(arr, num) {
    //新建一个数组,将传入的数组复制过来,用于运算,而不要直接操作传入的数组;
    var temp_array = new Array();
    for (var index in arr) {
        temp_array.push(arr[index]);
    }
    //取出的数值项,保存在此数组
    var return_array = new Array();
    for (var i = 0; i<num; i++) {
        //判断如果数组还有可以取出的元素,以防下标越界
        if (temp_array.length>0) {
            //在数组中产生一个随机索引
            var arrIndex = Math.floor(Math.random()*temp_array.length);
            //将此随机索引的对应的数组元素值复制出来
            return_array[i] = temp_array[arrIndex];
            //然后删掉此索引的数组元素,这时候temp_array变为新的数组
            temp_array.splice(arrIndex, 1);
        } else {
            //数组中数据项取完后,退出循环,比如数组本来只有10项,但要求取出20项.
            break;
        }
    }
    return return_array;
}

//测试
var my_array = new Array();
for (i = 0; i < 20; i++)
{
   my_array[i] = "Num:"+i;
}

my_array = getArrayItems(my_array,5);
for (i = 0; i < my_array.length; i++)
{
   alert(my_array[i]);
}

</script>


C#代码:

如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项        public static IList<string> getListItems(IList<string> list, int num)
                    //新建一个泛型列表,将传入的列表复制过来,用于运算,而不要直接操作传入的列表;    
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            //这样写是引用复制,不对啦,谢谢Osamede指出.
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            //IList<string> temp_list = list;
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            //另外这样写也要注意,也不是深度复制喽,关于深度复制可以做为一个新话题来说,这儿就不说啦;
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            IList<string> temp_list = new List<string>(list);
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            //取出的项,保存在此列表
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            IList<string> return_list = new List<string>();
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            //Random random = new Random(unchecked((int)DateTime.Now.Ticks));
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            Random random = new Random();
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            for (int i = 0; i < num; i++)
                            //判断如果列表还有可以取出的项,以防下标越界
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项                if (temp_list.Count > 0)
                                    //在列表中产生一个随机索引
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项                    int arrIndex = random.Next(0, temp_list.Count);
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项                    //将此随机索引的对应的列表元素值复制出来
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项                    return_list.Add(temp_list[arrIndex]);
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项                    //然后删掉此索引的列表项
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项                    temp_list.RemoveAt(arrIndex);
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项                }
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项                else
                                    //列表项取完后,退出循环,比如列表本来只有10项,但要求取出20项.
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项                    break;
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项                }
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            }
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            return return_list;
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项        }


测试:

如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项static void Main(string[] args)
                    IList<string> temp_list = new List<string>();
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            for (int i = 0; i < 20; i++)
                            temp_list.Add("Num:" + i.ToString());
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            }
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            temp_list = getListItems(temp_list, 5);
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            for (int i = 0; i < temp_list.Count; i++)
                            WL(temp_list[i]);
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            }
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项            RL();
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项        }
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项
        Helper methods:
           private static void WL(object text, params object[] args)
                    Console.WriteLine(text.ToString(), args);
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项        }
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项        private static void RL()
                    Console.ReadLine();
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项        }
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项        private static void Break()
                    System.Diagnostics.Debugger.Break();
如何从数组中随机取出多个不重复的项
    

如何从数组中随机取出多个不重复的项        }

 

相关文章: