Sort list of string arrays c#
Solution 1
You can use LINQ:
animalList = animalList
.OrderBy(arr => arr[0])
.ThenBy(arr => arr[1])
.ToList();
Your sample:
List<string[]> animalList = new List<String[]>{
new []{"Dog", "Golden Retriever", "Rex"},
new []{"Cat", "Tabby", "Boblawblah"},
new []{"Fish", "Clown", "Nemo"},
new []{"Dog", "Pug", "Daisy"},
new []{"Cat", "Siemese", "Wednesday"},
new []{"Fish", "Gold", "Alaska"}
};
Result:
- [0] {string[3]} string[]
[0] "Cat" string
[1] "Siemese" string
[2] "Wednesday" string
- [1] {string[3]} string[]
[0] "Cat" string
[1] "Tabby" string
[2] "Boblawblah" string
- [2] {string[3]} string[]
[0] "Dog" string
[1] "Golden Retriever" string
[2] "Rex" string
- [3] {string[3]} string[]
[0] "Dog" string
[1] "Pug" string
[2] "Daisy" string
- [4] {string[3]} string[]
[0] "Fish" string
[1] "Clown" string
[2] "Nemo" string
- [5] {string[3]} string[]
[0] "Fish" string
[1] "Gold" string
[2] "Alaska" string
Solution 2
You can do:
var newList = list.OrderBy(r => r[0])
.ThenBy(r => r[1])
.ThenBy(r => r[2])
.ToList();
This will assume that your List
will have an element of string array with a length of at least 3 items. This will first sort the List based on First item of the array, Animal
, Then Bread
and then Name
.
If your List
is defined as:
List<string[]> list = new List<string[]> { new [] {"Dog", "Golden Retriever", "Rex"},
new [] { "Cat", "Tabby", "Boblawblah"},
new [] {"Fish", "Clown", "Nemo"},
new [] {"Dog", "Pug", "Daisy"},
new [] {"Cat", "Siemese", "Wednesday"},
new [] {"Fish", "Gold", "Alaska"}
};
A better way to approach that problem would be to have custom class, with Type
, Bread
and Name
as property and then use that instead of string[]
You can define your own class:
public class Animal
{
public string Type { get; set; }
public string Bread { get; set; }
public string Name { get; set; }
public Animal(string Type, string Bread, string Name)
{
this.Type = Type;
this.Bread = Bread;
this.Name = Name;
}
}
and then define your List<Animal>
like:
List<Animal> animalList = new List<Animal>
{
new Animal("Dog", "Golden Retriever", "Rex"),
new Animal("Cat", "Tabby", "Boblawblah"),
new Animal("Fish", "Clown", "Nemo"),
new Animal("Dog", "Pug", "Daisy"),
new Animal("Cat", "Siemese", "Wednesday"),
new Animal("Fish", "Gold", "Alaska"),
};
Later you can get the sorted list like:
List<Animal> sortedList = animalList
.OrderBy(r => r.Type)
.ThenBy(r => r.Bread)
.ToList();
If you want, you can implement your own custom sorting, see: How to use the IComparable and IComparer interfaces in Visual C#
suhMAN
Updated on June 22, 2022Comments
-
suhMAN almost 2 years
I have a list of string arrays, where the arrays are formatted as [Animal, Breed, Name]:
{ ["Dog", "Golden Retriever", "Rex"], ["Cat", "Tabby", "Boblawblah"], ["Fish", "Clown", "Nemo"], ["Dog", "Pug", "Daisy"], ["Cat", "Siemese", "Wednesday"], ["Fish", "Gold", "Alaska"] }
How would I sort this list so that it was arranged alphabetically by "Animal", and then "Breed"? i.e.:
{ ["Cat", "Siamese", "Boblawblah"], ["Cat", "Tabby", "Wednesday"], ["Dog", "Golden Retriever", "Rex"], ["Dog", "Pug", "Daisy"], ["Fish", "Clown", "Nemo"], ["Fish", "Gold", "Alaska"] }
I am currently trying:
animalList.Sort((s, t) => String.Compare(s[0], t[0]));
But that is not sorting the second column correctly. In addition to sorting by the first two columns alphabetically, how would I then add in the third column?