Dart Lesson 28 of 102 3 min read
Lists in Dart: Create, Access, Add, Remove and Sort
Complete guide to List in Dart: creating lists, indexing, adding and removing items, searching, sorting, sublists and fixed-length lists.
On this page
A List is an ordered collection, the same idea other languages call an array. Each item has a position, called its index, starting at 0.
Creating and reading #
void main() {
var fruits = ['apple', 'banana', 'cherry'];
print(fruits[0]);
print(fruits[fruits.length - 1]);
print(fruits.first);
print(fruits.last);
print(fruits.length);
}
apple
cherry
apple
cherry
3
Asking for an index that does not exist, such as fruits[5], throws a RangeError.
Changing items #
void main() {
var fruits = ['apple', 'banana', 'cherry'];
fruits[1] = 'blueberry'; // replace
fruits.add('date'); // add to the end
fruits.addAll(['fig', 'grape']); // add several
fruits.insert(0, 'apricot'); // add at a position
print(fruits);
}
[apricot, apple, blueberry, cherry, date, fig, grape]
Removing items #
void main() {
var numbers = [10, 20, 30, 40, 50, 60];
numbers.remove(30); // by value
numbers.removeAt(0); // by index
numbers.removeLast();
numbers.removeWhere((n) => n > 45); // by condition
print(numbers);
numbers.clear();
print(numbers);
}
[20, 40]
[]
Searching #
void main() {
var names = ['Ram', 'Sita', 'Hari', 'Gita'];
print(names.contains('Hari'));
print(names.indexOf('Hari'));
print(names.indexOf('Nobody')); // -1 means not found
print(names.firstWhere((n) => n.endsWith('ita')));
print(names.indexWhere((n) => n.startsWith('G')));
}
true
2
-1
Sita
3
Sorting and reversing #
sort changes the list itself. reversed gives back a new view and leaves the list alone.
void main() {
var scores = [72, 95, 58, 81];
scores.sort();
print(scores);
scores.sort((a, b) => b.compareTo(a)); // highest first
print(scores);
print(scores.reversed.toList());
}
[58, 72, 81, 95]
[95, 81, 72, 58]
[58, 72, 81, 95]
Slicing #
void main() {
var letters = ['a', 'b', 'c', 'd', 'e'];
print(letters.sublist(1, 3)); // index 1 up to, not including, 3
print(letters.take(2).toList());
print(letters.skip(3).toList());
print(letters.join('-'));
}
[b, c]
[a, b]
[d, e]
a-b-c-d-e
Other ways to build a list #
void main() {
var zeros = List.filled(3, 0); // fixed length
var squares = List.generate(5, (i) => i * i); // from a function
var copy = List.of(squares); // a separate copy
var locked = List.unmodifiable([1, 2, 3]); // cannot be changed
print(zeros);
print(squares);
print(copy);
print(locked);
}
[0, 0, 0]
[0, 1, 4, 9, 16]
[0, 1, 4, 9, 16]
[1, 2, 3]
List.filled creates a fixed-length list: you can change its items but add throws an error.
Lists are shared, not copied #
Assigning a list to another variable does not copy it. Both names refer to the same list.
void main() {
var a = [1, 2, 3];
var b = a; // same list
var c = [...a]; // a real copy
b.add(4);
print(a);
print(c);
}
[1, 2, 3, 4]
[1, 2, 3]
Lists of lists #
void main() {
var grid = [
[1, 2, 3],
[4, 5, 6],
];
print(grid[1][2]);
}
6
Try it yourself #
Start with [34, 12, 45, 12, 9]. Remove the duplicate, sort it from highest to lowest, add 50 at the front, and print the middle item.