2013-03-18 85 views
0

我創建在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

我編輯了您的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2013-03-18 18:56:55

+0

爲什麼你不能存儲所有的數字在每次你實例化一個新的數字,然後只是加入他們排序... – inside 2013-03-18 19:00:57

+0

它更容易在列表上排序親自Stanislav – MethodMan 2013-03-18 19:05:18

回答

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); 
+0

我想將此代碼應用於'排序「按鈕在我的代碼。我有複製並粘貼到按鈕,但按下時沒有任何反應。這是因爲我正在重新調用一個新的隨機實例嗎? – 2013-03-18 19:17:59

+0

你在申請什麼類型的什麼類型的收藏。由於各種類型的比較器的變化,它取決於類型。 – Gabe 2013-03-18 19:26:35

+0

對於字符串,一旦我得到一個隨機數我使用.ToString。我想要做的是一旦用戶點擊排序按鈕後生成的數字爲他們進行排序。我應該將它們存儲在generate方法的列表中,然後調用列表。排序方法中的sort()? – 2013-03-18 19:31:20

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()

-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]; 
+0

請解釋downvotes ... :( – 2013-03-22 11:48:14

-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(); 
+0

-1使用'ArrayList' – 2013-03-18 19:12:54

+0

什麼那麼差ArrayList? – Landvis 2013-03-18 19:15:22

+0

@約翰...請解釋 – MikeTWebb 2013-03-18 19:56:13

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(); 
    } 
}