Click here to Skip to main content
15,909,039 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I have a list like this:
C#
List<string> numbers = new List<string>();
            numbers.Add("1");
            numbers.Add("2");
            numbers.Add("3");
            numbers.Add("4");
            numbers.Add("5");
            numbers.Add("6");
            numbers.Add("7");
            numbers.Add("8");
            numbers.Add("9");
            numbers.Add("10");
            numbers.Add("11");
            numbers.Add("12");
            numbers.Add("13");
            numbers.Add("14");
            numbers.Add("15");
            numbers.Add("16");
            numbers.Add("17");
            numbers.Add("18");
            numbers.Add("19");
            numbers.Add("20");
            numbers.Add("21");
            numbers.Add("22");
            numbers.Add("23");
            numbers.Add("24");
            numbers.Add("25");
            numbers.Add("26");
            numbers.Add("27");
            numbers.Add("28");
            numbers.Add("29");
            numbers.Add("30");
            numbers.Add("31");
            numbers.Add("32");
            numbers.Add("33");
            numbers.Add("34");
            numbers.Add("35");

Now I want to achieve 3 tasks:
1: take one of the members randomly.
2: prevent the shown number to repeat
3: being able to restart the list.(like resetting the list so any number can come again but still repeated ONCE)
Thanks in advance for all your help...
Posted
Comments
Santosh K. Tripathi 5-May-15 4:14am    
what you have tried till now?

First off, you don't have to specify the number individually:
C#
List<string> numbers = Enumerable.Range(1, 28).Select(i => i.ToString()).ToList();
Will fill it nicely.
And you can create a copy of the list for later "reset" very easily:
C#
List<string> original = numbers.ToList();

Get one randomly? Also simple:
C#
private Random rand = new Random();
...
    int index = rand.Next(numbers.Count);
    string value = numbers[index];

And to prevent repetition, just add one line:
C#
numbers.RemoveAt(index);


[edit]Stupid HTML tag autocomplete...[/edit]
 
Share this answer
 
v2
Comments
CPallini 5-May-15 4:35am    
5
Helifiction 5-May-15 4:42am    
thanks a million times but how do I display it in a text box?
I have a textbox that I want the number on it but when I try:
private void pickWinner_Click(object sender, EventArgs e)
{ Random rand = new Random();
int index = rand.Next(numbers.Count);
string value = numbers[index];
numbers.RemoveAt(index);
textBox1.Text = (numbers[rand.Next(0, 40)])
}
I get a out of the range exception.
Thanks again
OriginalGriff 5-May-15 5:03am    
What did you expect? You just deleted it!

That was why I saved the value in "value" *before* I removed it...
Helifiction 5-May-15 5:06am    
Wow ok now I got it thanks hundreds of times for you answers. :)
OriginalGriff 5-May-15 5:12am    
You're welcome!
I would generate a random sequence and store it in a list:
C#
var rnd = new Random();
var list = Enumerable.Range(1, 35)
	.Select(x => new {Value = x, SortKey = rnd.Next()})
	.OrderBy(x => x.SortKey)
	.Select(x => x.Value)
	.ToList();

Then you can easily select number one by one. If you which to reset then you just simply move the pointer to the first element. Alternatively you can generate a new list.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900