Commits

Inside Zhou committed 26f3b63

生成随机数的方式错误,改为取guid的hashcode。

Comments (0)

Files changed (1)

IListExtension.cs

 using System;
 using System.Collections;
+using System.Collections.Generic;
 
 namespace Inside.Util {
 	/// <summary>
 	/// </summary>
 	public static class IListExtension {
 		/// <summary>
-		/// 从集合中随机选择一个元素。
+		/// 从集合中随机选择元素。
 		/// </summary>
-		/// <param name="except">要在随机选择中排除的元素。</param>
-		/// PDL:
-		/// 生成随机索引,比较except与集合中该索引表示的元素,直至找到不相等的为止
-		public static T RandomSelect<T>(this IList src) {
-			if(null == src || 0 == src.Count) {
-				throw new ArgumentException("不能是空集合。");
+		public static T[] RandomSelect<T>(this IList src, int count = 6) {
+			if(null == src) {
+				throw new ArgumentNullException("src");
 			}
 
-			return (T)src[new Random().Next() % src.Count];
+			if(src.Count <= count) {
+				throw new ArgumentException("集合的长度必须大于选择的个数。", "count");
+			}
+
+			var result = new List<T>();
+			for(int i = 0;i < count;++i) {
+				result.Add((T)src[Math.Abs(Guid.NewGuid().GetHashCode()) % src.Count]);
+			}
+
+			return result.ToArray();
 		}
 
 		/// <summary>
 				/* 生成一个区间在[0.0, 1.0)的随机数,
 				 * 将其与光标索引相乘得到位于[0, cursorIndex)区间的一个随机数。
 				 */
-				tmpCursorIndex = (int)(new Random().NextDouble() * cursorIndex);
+				tmpCursorIndex = Math.Abs(Guid.NewGuid().GetHashCode()) % cursorIndex;
 
 				tmpForSwap = src[cursorIndex];
 				src[cursorIndex] = src[tmpCursorIndex];