轉貼自.NET隨筆 http://www.dotblogs.com.tw/atowngit/Default.aspx

Interduction

可能有時候,我們需要再連續的數字中(如 5~19),亂數取出,但又不重複。

小弟我,自己做個練習。網路上關於﹝產生不重覆的亂數﹞方法很多,先列出一些參考的好文。

Example

01 class Program {
02        static void Main(string[] args) {           
03            int[] arrNumber = GenerateRandom(3, 18);
04  
05            for (int N1 = 0; N1 < arrNumber.Length; N1++) {
06                Console.Write(" " + arrNumber[N1]);
07            }
08            Console.ReadKey();
09        }
10  
11        /// <summary>
12        /// 產生亂數。
13        /// </summary>
14        /// <param name="start">起始數字。</param>
15        /// <param name="end">結束數字。</param>       
16        static int[] GenerateRandom(int start, int end) {
17            int iLength = end - start + 1;
18            int[] arrList = new int[iLength];
19            for (int N1 = 0; N1 < iLength; N1++) {
20                arrList[N1] = N1 + start;
21            }
22  
23            arrList = Shuffle<int>(arrList);
24            return arrList;
25        }
26  
27        //洗牌。
28        static T[] Shuffle<T>(IEnumerable<T> values) {
29            List<T> list = new List<T>(values);
30            T tmp;
31            int iS;
32            Random r = new Random();
33            for (int N1 = 0; N1 < list.Count; N1++) {
34                iS = r.Next(N1, list.Count);
35                tmp = list[N1];
36                list[N1] = list[iS];
37                list[iS] = tmp;
38            }
39            return list.ToArray();
40        }             
41    }

結果輸出:

arrow
arrow
    全站熱搜

    Ching 發表在 痞客邦 留言(0) 人氣()