How can I sort a list of strings in Dart?

StringListSortingDart

String Problem Overview


I see in the API docs there is a sort() method on List, but I'm not clear what it needs for a parameter. The current need is for a very simple straight up alpha comparison.

String Solutions


Solution 1 - String

1. A Quick Solution

Thanks for the question! You can sort a list of Strings like this:

main() {
  final List<String> fruits = <String>['bananas', 'apples', 'oranges'];
  fruits.sort();
  print(fruits);
}

The above code prints:

[apples, bananas, oranges]

2. Slightly more advanced usage

Notice that sort() does not return a value. It sorts the list without creating a new list. If you want to sort and print in the same line, you can use method cascades:

print(fruits..sort());

For more control, you can define your own comparison logic. Here is an example of sorting the fruits based on price.

main() {
  final List<String> fruits = <String>['bananas', 'apples', 'oranges'];
  fruits.sort((a, b) => getPrice(a).compareTo(getPrice(b)));
  print(fruits);
}

Let's see what's going on here.

A List has a sort method, which has one optional parameter: a Comparator. A Comparator is a typedef or function alias. In this case, it's an alias for a function that looks like:

int Comparator(T a, T b)

From the docs:

> A Comparator function represents such a total ordering by returning a negative integer if a is smaller than b, zero if a is equal to b, and a positive integer if a is greater than b.

3. How to do it with a list of custom objects

Additionally, if you create a list composed of custom objects, you could add the Comparable<T> as a mixin or as inheritance (extends) and then override the compareTo method, in order to recreate the standard behavior of sort() for your list of custom objects. For more info, do check out this other, related StackOverflow answer.

Solution 2 - String

Here is the one line code to achieve it.

fruits.sort((String a, String b)=>a.compareTo(b)); //fruits is of type List<String>

Solution 3 - String

Here you are . All you need to know

For Sorting Simple List of Integers or Strings

var list = [5 , -5 ,1];
 list.sort(); //-5 , 1 , 5

For Reversing the list order

list.reversed ;

For Sorting List of Objects or Map by field of it

List<Map<String, dynamic>> list= [    {"name": "Shoes", "price": 100},    {"name": "Pants", "price": 50},  ];

  // from low to high according to price
  list.sort((a, b) => ["price"].compareTo(b["price"]));
  

  // from high to low according to price
  list.sort((a, b) => b["price"].compareTo(a["price"]));
 

Solution 4 - String

To add just one point to Seth's detailed answer, in general, in

(a, b) => foo(a, b)

passed into sort, the function foo should answer an integer result as follows:

  • if a < b, result should be < 0,
  • if a = b, result should be = 0, and
  • if a > b, result should be > 0.

For the above law of trichotomy to hold, both a and b must be Comparables.

Solution 5 - String

use compareAsciiUpperCase instead of compareTo, as it supports strings and automatically ignores case sensitive

import "package:collection/collection.dart";


data.sort((a, b) {
  return compareAsciiUpperCase(a.name, b.name);
});

https://api.flutter.dev/flutter/package-collection_collection/compareAsciiUpperCase.html

Solution 6 - String

After today, you should just be able to do list.sort() . The sort method's argument is now optional, and it defaults to a function that calls compareTo on the elements themselves. Since String is Comparable, it should Just Work now.

Solution 7 - String

How I have solved this problem.


  List<Product> _dataSavingListProducts = [];
  List<Product> _dataSavingListFavoritesProducts = [];

  void _orderDataSavingLists() {
    _dataSavingListProducts.toList().reversed;
    _dataSavingListFavoritesProducts.toList().reversed;
  }


Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questiongeorge kollerView Question on Stackoverflow
Solution 1 - StringSeth LaddView Answer on Stackoverflow
Solution 2 - StringParas khandelwalView Answer on Stackoverflow
Solution 3 - StringOmar EssamView Answer on Stackoverflow
Solution 4 - StringJONNALAGADDA SrinivasView Answer on Stackoverflow
Solution 5 - StringloonixView Answer on Stackoverflow
Solution 6 - StringLasse NielsenView Answer on Stackoverflow
Solution 7 - StringGtdDevView Answer on Stackoverflow