重新排列任意整数数组

拉姆鲁米·阿菲夫(Lamloumi Afif)

我有一个方法接受一个整数数组作为参数,我只是随意改变其值的顺序

public static int[] _game_number = new int[4];
public static int[] _current_number = new int[4];

public static void GetRandomTwentyFour()
{
    HashSet<int> nums = new HashSet<int>();
    for (int i = 0; i < 4; i++)
    {
        Random r = new Random();
        nums.Add(r.Next(0, 4));
    }
    List<int> liste = nums.ToList<int>();
    _current_number = new int[] { _game_number[liste[0]], _game_number[liste[1]], _game_number[liste[2]], _game_number[liste[3]] };
}

问题在于nums的元素数并不总是四个。

  • 因此,如何修改代码段以完成任务?
  • 还有另一种方法吗?
皮埃尔·卢克·皮诺特

如果要随机重新排序,只需将带有随机事物的OrderBy用作选择器。

通常您可以使用Random.Next()

public static int[] _game_number = new int[4];
public static int[] _current_number = new int[4];
private static Random random = new Random();

public static void GetRandomTwentyFour()
{
    _current_number = _game_number.OrderBy(r => random.Next()).ToArray();
}

但是,新的方法Guid也可以在这里使用²,并为您节省一个私人领域:

public static int[] _game_number = new int[4];
public static int[] _current_number = new int[4];

public static void GetRandomTwentyFour()
{
    _current_number = _game_number.OrderBy(g => new Guid()).ToArray();
}

²请注意,向导并不是“随机的”,而是“唯一的”。但是,由于您可能没有进行过正式的申请(银行,在线扑克等),因此使用IMO是合理的。对于随机性非常重要的应用程序,来自加密名称空间RandomNumberGenerator会是更好的选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章