对随机生成的数字的集合进行排序

时间:2013-03-18 18:54:11

标签: c# random

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

5 个答案:

答案 0 :(得分: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();

如果您要与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);

答案 1 :(得分: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()

答案 2 :(得分: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();
    }
}

答案 3 :(得分:-1)

如果您总是有六个字段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];

答案 4 :(得分:-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();