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,您可以将它们的内容添加到 aList<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 回答