Home > Blockchain >  Sort List in Random Alphabetical Order
Sort List in Random Alphabetical Order

Time:11-18

I have a class Tester, where the definition is

public class Tester
{
     public string Name;
     public int TaskCount;  
     public Tester(string name, int taskCount)
     {
          Name = name;
          TaskCount = taskCount;
     }
}

, and I am asked to implement a method to sort a list of Tester objects by the ascending order of TaskCount.

For example, I have 3 Tester objects in the list: new Tester("A", 1), new Tester("B", 5), new Tester("C", 1), and if I just use the default OrderBy method to sort them by TaskCount, the list would always looks like:

A (TaskCount: 1)
C (TaskCount: 1)
B (TaskCount: 5)

because in alphabetical order, the letter 'A' always comes before 'C'. Is there a way for me to sort the list in random alphabetical order while it's still in ascending order of TaskCount, so there's 50% chance that the result would look like ACB and 50% chance be CAB? Thank you in advance!

CodePudding user response:

You could use a Random number generator for subsequent ordering after the initial ordering.

List<Tester> lt = new List<Tester>();
lt.Add(new Tester("C", 1));
lt.Add(new Tester("B", 5));
lt.Add(new Tester("A", 1));
lt.Add(new Tester("D", 5));

Random r = new Random();
Console.WriteLine(lt.OrderBy(x => x.TaskCount).ThenBy(x => r.Next()));

The OrderBy will put the Tester instances into TaskCount order, the ThenBy will randomise those that have the same TaskCount value.

Note - the original ordering of A, C, B was not due to alphabetic order of Name, but order of insertion into the list.

  • Related