2017-08-13 48 views
0

我該如何根據其他數組中生成的最低值創建一個數組數組?我已經創建了一個數組,生成-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("//////////////////////////////////////////////////////////////////////////"); 
    } 
} 

}

+0

'變種最低= numbers.Min();'' – Laoujin

+0

變種secondSetOfNumbers = firstSetOfNumbers.OrderBy(N => N)。取(100).ToArray( );' –

+1

另外,請記住['Random.Next'](https://msdn.microsoft.com/en-us/library/2dx6wyd4(v = vs.110).aspx)上的'maxValue'是* exclusive *,因此在你的代碼中,'1000'永遠不會出現在列表中。 –

回答

1

使用LINQ的力量:

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

基於關閉@Laoujin的答案,但稍微擴大一點。

這將產生1000個整數,從-1000到1000,並給你一個100最低的數組。我在Random.Next(Int32, Int32)的呼叫中加1max,因爲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表達式中未使用的參數。在這種情況下,該變量包含通過Select()調用從Enumerable.Range()生成的當前編號,但由於它未被使用,因此它僅被命名爲_。這不是以任何方式由語言強制實施的,這是很多程序員使用的常見模式。


可能包含重複的,所以,如果你不想讓他們,你可以通過列表雖然IEnumerable.Distinct()第一,僅返回唯一項目:如果你想絕對的最低

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

從第一陣列號,可以只是做:

var lowestNumber = numbers.Min(); 
+0

謝謝!我最終找出了一種不使用它的方法,但是現在我正試圖通過這種方式來學習它。 – Jay

+0

如果你想了解更多關於這種做事的方式,它被稱爲LINQ(語言集成查詢)。 –

相關問題