对一组随机生成的数字进行排序

本文关键字:数字 排序 随机 一组 | 更新日期: 2023-09-27 18:04:28

我正在用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然后从那里排序吗?我不确定如何将随机数分组在一起,然后对它们调用排序方法。

对一组随机生成的数字进行排序

只需将随机数添加到列表中并对它们进行排序。

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();

如果你要比较一个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);

如果您将随机数存储在列表中,则可以使用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()

这是一个生成随机数并保存它们以供以后使用的解决方案。

//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();
    }
}

如果您总是有六个字段Num1 - Num6,您可以将它们的内容添加到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];

是的,你可以使用数组:

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();