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