Reputation: 105
I have the following list made up of CustomerName and SalesId example:
List1
In the next part im extracting the unique CustomerName from List1 and putting them in List2, this list will be reordered to the user's liking and may end up looking something like:
List2
Now I want to reorder List1 based on the sequence of list2 (SalesId sequence doesn't matter)
Upvotes: 0
Views: 412
Reputation: 31249
You could create a map based on index2
which can be used to lookup the sorting order. So something like this:
void main() {
final List<Store> list1 = [
Store(customerName: 'StoreA', salesId: '001'),
Store(customerName: 'StoreB', salesId: '002'),
Store(customerName: 'StoreB', salesId: '003'),
Store(customerName: 'StoreC', salesId: '004'),
];
final List<String> list2 = [
'StoreB',
'StoreC',
'StoreA',
];
final Map<String, int> _sortingOrderMap = {
for (var i = 0; i < list2.length; i++) list2[i]: i
};
print(_sortingOrderMap);
// {StoreB: 0, StoreC: 1, StoreA: 2}
list1.forEach(print);
// StoreA - 001
// StoreB - 002
// StoreB - 003
// StoreC - 004
list1.sort((s1, s2) => _sortingOrderMap[s1.customerName]!
.compareTo(_sortingOrderMap[s2.customerName]!));
list1.forEach(print);
// StoreB - 002
// StoreB - 003
// StoreC - 004
// StoreA - 001
}
class Store {
final String customerName;
final String salesId;
Store({required this.customerName, required this.salesId});
@override
String toString() => '$customerName - $salesId';
}
You might need to modify the solution if you need to handle cases of customerName
not being in list2
if that is a possible scenario.
Upvotes: 2