1

1つの配列に乱数が必要です。

array like this int[] random={"1","2","3","4","5"};

これらの番号をランダムに取得したいと思います。正常に動作していますが、価値は繰り返されています。私は価値を繰り返しません。同じ番号を繰り返さずに乱数が欲しい。

このコードを使用して乱数を取得しています。

Random randomnumber=new Rambom();
int number= randomnumber.Next(random.Length()); 

誰かが私にこれをする考えを教えてくれるのを知っているなら、

ありがとう。

4

5 に答える 5

4

ランダム配列が数値のソースである場合は、取得した数値を削除できるため、重複を完全に削除できます:-

    List<int> random = new List<int>() { 1, 2, 3, 4, 5 };

    private void MyButton_Click(object sender, RoutedEventArgs e)
    {
        Random randomnumber = new Random();

        int number = random[randomnumber.Next(0, random.Count - 1)];

        random.Remove(number);

        MyList.Items.Add(number);
    }
于 2012-04-24T12:02:31.767 に答える
1

Paul Distonの魂は十分に良いですが、数字が多いほど非効率的です。乱数を生成する簡単な方法の1つは、それらをHashSetに追加することです。スニペット:

        HashSet<int> hashSet = new HashSet<int>();

        for (int i = 0; i < 10; i++)
        {
            hashSet.Add(rand.Next(5));
        }
        foreach (var item in hashSet.AsEnumerable()) //hashSet.ToList() to get list
        {
            Console.WriteLine(item);
        }

後でランダム配列の別のリストが必要な場合は、シャッフルします。それを行うための最良の方法の1つは、フィッシャー-イェーツシャッフルです。スニペット:

public static void Shuffle<T> (Random rand, IList<int> list)
{
    int n = list.Count;
    while (n > 1) 
    {
        int k = rand.Next(n--);
        //swapping values
        T temp = list[n]; 
        list[n] = list[k];
        list[k] = temp;
    }
}

残念ながら、このための組み込み機能はありません。

于 2012-04-24T13:59:33.053 に答える
0

配列をループして、すでに番号を追加しているかどうかを確認します。持っている場合は、新しいランダムを作成します。その後、もう一度確認してください。

于 2012-04-24T11:54:23.223 に答える
0

ランダム配列からすでに選択されている値を削除することを考えています。したがって、「ランダム配列」で「番号」を検索して削除できます。

于 2012-04-24T11:56:09.090 に答える
0

重複を回避する効率的な方法は、見つかった番号を配列の最後の要素と交換してから、配列のサイズを1つ減らすことです。

于 2012-04-25T20:26:40.333 に答える