假設我們有一個名為 的類Thing,其定義如下:
class Thing {
final int id;
final String name;
Thing(this.id, this.name);
}
我們有一個這樣的類串列:
final List<Thing> things= [
Thing(1, 'Black Car'),
Thing(2, 'Red Car'),
Thing(3, 'Car'),
Thing(4, 'Green Car'),
Thing(5, 'Car Yellow'),
Thing(6, 'Car Blue'),
];
現在我們想在這個串列中使用這樣的詞搜索一些東西Car:
things.where(
(thing) => thing.name.contains('Car')
).toList()
結果將是:
[
Thing(1, 'Black Car'),
Thing(2, 'Red Car'),
Thing(3, 'Car'),
Thing(4, 'Green Car'),
Thing(5, 'Car Yellow'),
Thing(6, 'Car Blue'),
]
現在我如何按名稱以搜索詞開頭的事物對結果進行排序Car,換句話說,我希望這是結果:
[
Thing(3, 'Car'),
Thing(5, 'Car Yellow'),
Thing(6, 'Car Blue'),
Thing(2, 'Red Car'),
Thing(1, 'Black Car'),
Thing(4, 'Green Car'),
]
提前致謝。
uj5u.com熱心網友回復:
您可以使用排序功能根據需要對串列進行排序。這是一個作業示例:
class Thing {
final int id;
final String name;
Thing(this.id, this.name);
Map toJson() {
Map data = {};
data['id'] = id;
data['name'] = name;
return data;
}
}
final List<Thing> things = [
Thing(1, 'Black Car'),
Thing(2, 'Red Car'),
Thing(3, 'Car'),
Thing(4, 'Green Car'),
Thing(5, 'Car Yellow'),
Thing(6, 'Car Blue'),
];
void main() async {
List<Thing> myList =
things.where((thing) => thing.name.contains('Car')).toList();
myList
..sort((Thing a, Thing b) {
int indexOfCarInA = a.name.indexOf('Car');
int indexOfCarInB = b.name.indexOf('Car');
if (indexOfCarInA < indexOfCarInB)
return -1;
else if (indexOfCarInA == indexOfCarInB) if (a.id <= b.id) return -1;
return 1;
});
myList.forEach((element) {
print(element.toJson());
});
}
uj5u.com熱心網友回復:
使用List.sort,當事情以“汽車”開頭時,您會優先考慮:
final filteredThings = things.where(
(thing) => thing.name.contains('Car')
).toList();
filteredThings.sort((a, b) {
if (a.startsWith('Car') && !b.startsWith('Car')) {
return 1;
}
if (b.startsWith('Car') && !a.startsWith('Car')) {
return -1;
}
return a.name.compareTo(b.name);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441051.html
上一篇:如何對字典中的串列進行排序?C#
下一篇:從物件陣列的內部陣列中洗掉重復項
