根据其他数组中的最小数字生成数字数组?

时间:2017-08-13 21:34:34

标签: c#

如何根据其他数组中生成的最低值创建数组?我创建了一个生成-1000到1000之间数字的数组,并计算出该数字中的最小数字;我的问题是在我相信之后。我无法弄清楚如何将最低值添加到" lowestNumbers"阵列。

static void Main(string[] args)
    {
        //ints and arrays used in the program.
        int min = -1000;
        int max = 1000;
        int currentMinimum = 1000;
        int[] numbers = new int[10];
        int[] lowestNumbers = new int[numbers.Length];
        Random rndm = new Random();

        //Using a loop to create random numbers within numbers array between -1000 and 1000.
        for (int i = 0; i < lowestNumbers.Length; i++)
        {
            if (i < lowestNumbers.Length)
            {
                for (int index = 0; index < numbers.Length; index++)
                {
                    if (index < numbers.Length)
                    {
                        numbers[index] = rndm.Next(min, max);
                    }
                }

                for (int index = 0; index < numbers.Length; index++)
                {
                    if (numbers[index] < currentMinimum)
                        currentMinimum = numbers[index];
                }
            }
            lowestNumbers[i] = currentMinimum;
        }

        foreach (int value in lowestNumbers)
            Console.WriteLine(value);
        Console.WriteLine("//////////////////////////////////////////////////////////////////////////");
    }
}

}

2 个答案:

答案 0 :(得分:1)

使用Linq的力量:

var numbers = Enumerable.Range(1, 100).Select(_ => rndm.Next(min, max)).ToArray();
var lowest = numbers.Min();

答案 1 :(得分:0)

基于@Laoujin的答案,但略微扩大了一点。

这将生成1000个整数,从-1000到1000,并给出一个100最低的数组。我在Random.Next(Int32, Int32)的通话中将1添加到max,因为maxValue 独占,否则号码1000将永远不会显示在结果数组中。

var numbers = Enumerable.Range(1, 1000).Select(_ => rndm.Next(min, max+1)).ToArray();
var lowest = numbers.OrderBy(n => n).Take(100).ToArray();

作为一个额外的注释,如果你对第一行中的_感到困惑(许多人,他们第一次看到它使用这种方式),这通常用于表示未使用的参数一个lambda表达式。在这种情况下,该变量包含通过Enumerable.Range()调用从Select()生成的当前数字,但由于它未被使用,因此它名为_。语言不以任何方式强制执行,这是许多程序员使用的常见模式。

虽然可能包含重复项,但如果你不想要它们,你可以先通过IEnumerable.Distinct()传递列表,它只返回唯一的项目:

var lowest = numbers.Distinct().OrderBy(n => n).Take(100).ToArray();

如果你想要第一个数组中的绝对最小数字,你可以这样做:

var lowestNumber = numbers.Min();