0

C#で乱数ジェネレーターを作成しています

私はそのように数字を生成します

Random RandomClass = new Random();

Num1.text = RandomClass.Next(1,49).ToString();
Num2.text = RandomClass.Next(1,49).ToString();
Num3.text = RandomClass.Next(1,49).ToString();
Num4.text = RandomClass.Next(1,49).ToString();
Num5.text = RandomClass.Next(1,49).ToString();
Num6.text = RandomClass.Next(1,49).ToString();

ユーザーがボタンをクリックすると、数字が生成されます。私が欲しいのは、数字を並べ替えることができるボタンがあることです。たとえば、最小から最小までです。

生成された数値を配列に変換して .ToArray を呼び出し、そこから並べ替えることはできますか? 乱数をグループ化して並べ替えメソッドを呼び出す方法がわかりません。

4

5 に答える 5

3

乱数をリ​​ストに追加して並べ替えるだけです。

Random RandomClass = new Random();
List<int> list = new List<int>();

for (int i = 0; i < 10; i++)
    list.Add(RandomClass.Next(1, 49));
list.Sort();

// If you need to reverse it...
list.Reverse();

a と比較する場合はList<string>、比較子を作成する必要があります。

例:

private static int CompareValues(string x, string y)
{
    if (x == null)
        return y == null ? 0 : -1;
    else
    {
        if (y == null)
           return 1;
        else
        {
           int left = Int32.Parse(x);
           int right = Int32.Parse(y);

           if (left > right)
               return 1;
           else if (left < right)
               return -1;
           else
               return 0;
        }
     }
 }

次に、それを使用するには、メソッドに引数として渡しますSort()。これは、整数値を処理して適切にソートするためのカスタム比較として使用されるようになりました。

 list.Sort(CompareValues);
于 2013-03-18T19:00:35.447 に答える
0

乱数をリ​​ストに格納すると、Linq を使用して簡単に並べ替える (またはさまざまな方法で操作する) ことができます。メソッドがランダムな整数を返すと仮定します。

var myRandomNumbers = new List<int>
    {
        RandomClass.Next(1,49),
        RandomClass.Next(1,49)
    };

var mySortedRandomNumbers = myRandomNumbers.OrderByDescending(x => x).ToList();

もちろん、常に呼び出しているRandomClass.Next(1,49)場合は、ループを最適化し.Add()てリストで使用できます。

于 2013-03-18T19:00:04.093 に答える
0

乱数を生成し、後で使用できるように保存するソリューションを次に示します。

//fields
private readonly Random _random = new Random();
private readonly List<int> _randomNumbers = new List<int>();

public void SomeEvent(object sender, EventArgs e)
{
    _randomNumbers.Clear();

    Num1.text = GetRandom().First().ToString();
    Num2.text = GetRandom().First().ToString();
    Num3.text = GetRandom().First().ToString();
    Num4.text = GetRandom().First().ToString();
    Num5.text = GetRandom().First().ToString();
    Num6.text = GetRandom().First().ToString();
}

public void SortRandomNumbers(object sender, EventArgs e)
{
    var sortedRandoms = _randomNumbers;
    sortedRandoms.Sort();

    //do stuff with sortedRandoms
}

// Gets a random value and caches it
private IEnumerable<int> GetRandom()
{
    while(true)
    {
        var value = _random.Next(1, 49);
        _randomNumbers.Add(value);

        yield return _randomNumbers.Last();
    }
}
于 2013-03-18T19:09:16.593 に答える
-1

常に Num1 ~ Num6 の 6 つのフィールドがある場合、それらの内容を に追加し、List<int>を使用して並べ替え.OrderBy()、順序付きリストを使用して再度入力することができます。

List<int> nums = new List<int>();
nums.Add(Convert.ToInt32(Num1.text));
.
.
nums.Add(Convert.ToInt32(Num6.text));
nums = nums.OrderBy(num => num).ToList(); //or OrderByDescending
Num1.text = nums[0];
.
.
Num6.text = nums[5];
于 2013-03-18T19:01:04.727 に答える
-2

はい、配列を使用できます。

RandomClass.Next(1,49).ToString();
ArrayList numbers = new ArrayList();

for (int i = 0; i < 10; i++)
    numbers[i] = RandomClass.Next(1,49).ToString();

numbers.Sort();
于 2013-03-18T19:06:08.627 に答える