2015-08-15 45 views
1

我正在创建1到15个“随机”数字的列表,但没有任何重复。我已经创建了一个数组,并希望存储每个数字,但无法弄清楚如何执行此操作。我已经创建了随机列表并将它们存储在数组中,但无法确保没有重复。任何帮助,将不胜感激。我的代码如下:创建没有重复的随机数字列表

int[] myList = new int[15]; 
    Random random = new Random(); 

    for (int i = 0; myList.Length; i++) 
    { 
    myList[i] = random.Next(1, 15); 
    } 
+0

可能重复http://stackoverflow.com/questions/1519736/random-shuffling-of-an-阵列) – user140547

回答

1

因为你的列表的大小是相等的可能值,你可以在正常的秩序创建列表:

int[] myList = new int[15]; 
for (int i = 0; i < myList.Length; i++) 
{ 
    myList[i] = i + 1; 
} 

然后洗牌它,例如,通过对每一个条目和排序由值分配随机值:

Random random = new Random(); 
myList = myList.OrderBy(a => random.Next()).ToArray(); 
0

可以使用Fisher–Yates shuffle做到这一点。

示例实现:

int n = 15; 
int[] myList = new int[n]; 
Random random = new Random(); 

for (int i = 0; i < n; i++) 
{ 
    myList[i] = i + 1; 
} 
for (int i = n - 1; i >= 1; i--) 
{ 
    int j = random.Next(1, i); 
    int temp=myList[i]; 
    myList[i]=myList[j]; 
    myList[j]=temp; 
} 
0

你需要得到正确的算法。

开始从i = 15

挑选来自1的随机数为i。

将它追加到列表中。

用第(i-1)个索引进行交换。

将i减1。

重复上述步骤。

为上述代码可以是:

int[] myList = new int[15]; 
int[] original_list = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 
    Random random = new Random(); 

    for (int i = myList.Length; i>=0; i--) 
    {int randNo = random.Next(0, i-1); 
    myList[i] = original_list[randNo]; 
    swap(original_list[i-1],original_list[randNo]); //your swap method 
    } 
[阵列的随机洗牌(的