How can I sort a list of strings in Dart?

后端 未结 5 1991
萌比男神i
萌比男神i 2020-12-03 06:18

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 st

5条回答
  •  醉梦人生
    2020-12-03 07:12

    1. A Quick Solution

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

    main() {
      final List fruits = ['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 fruits = ['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 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.

提交回复
热议问题