[c#] 亂數不重複 (Random)

  • 47616
  • 0
  • 2009-12-25

摘要:[c#] 亂數不重複

Interduction

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

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

Example

 class Program {
        static void Main(string[] args) {            
            int[] arrNumber = GenerateRandom(3, 18);

            for (int N1 = 0; N1 < arrNumber.Length; N1++) {
                Console.Write(" " + arrNumber[N1]);
            }
            Console.ReadKey();
        }

        /// <summary>
        /// 產生亂數。
        /// </summary>
        /// <param name="start">起始數字。</param>
        /// <param name="end">結束數字。</param>        
        static int[] GenerateRandom(int start, int end) {
            int iLength = end - start + 1;
            int[] arrList = new int[iLength];
            for (int N1 = 0; N1 < iLength; N1++) {
                arrList[N1] = N1 + start;
            }

            arrList = Shuffle<int>(arrList);
            return arrList;
        }

        //洗牌。
        static T[] Shuffle<T>(IEnumerable<T> values) {
            List<T> list = new List<T>(values);
            T tmp; 
            int iS;
            Random r = new Random();
            for (int N1 = 0; N1 < list.Count; N1++) {
                iS = r.Next(N1, list.Count);
                tmp = list[N1];
                list[N1] = list[iS];
                list[iS] = tmp;
            }
            return list.ToArray();
        }              
    }

結果輸出:

Code 下載 : TestRandom.rar

三小俠  小弟獻醜,歡迎指教