Dart中如何访问对象列表的元素属性并按指定属性排序
解决方案
访问索引为0的元素的score属性
Dart 列表支持直接通过下标访问对应位置的元素,不需要额外用for循环,直接用如下代码即可打印对应属性:
print(itemList[0].score);
如果需要遍历所有元素打印score,才需要用到for循环,示例如下:
// 遍历打印所有元素的score for (var item in itemList) { print(item.score); }
按score字段从高到低排序列表
调用List自带的sort方法传入自定义比较逻辑即可实现排序,代码如下:
// 直接修改原列表的排序 itemList.sort((a, b) => b.score.compareTo(a.score));
如果不希望修改原列表,可以先拷贝一份再排序:
// 生成新的排序后列表,原列表不变 var sortedList = List<ItemData>.from(itemList)..sort((a, b) => b.score.compareTo(a.score));
注意:如果你的score字段可能为null,需要补充空值判断,比如用
b.score ?? 0替代b.score,避免空指针异常。
完整可运行测试代码
class ItemData { var id; var score; var title; var description; ItemData({this.id, this.score, this.title, this.description}); } void main() { // 构造测试数据 var itemList = [ ItemData(id: 1, score: 30, title: 'mock title1', description: 'mock description1'), ItemData(id: 2, score: 80, title: 'mock title2', description: 'mock description2'), ItemData(id: 3, score: 50, title: 'mock title3', description: 'mock description3'), ]; // 打印索引0的score print('索引0元素的score:${itemList[0].score}'); // 按score从高到低排序 itemList.sort((a, b) => b.score.compareTo(a.score)); // 遍历打印排序后所有元素的score print('排序后所有元素的score:'); for (var item in itemList) { print(item.score); } }
运行输出结果:
索引0元素的score:30 排序后所有元素的score: 80 50 30
内容的提问来源于stack exchange,提问作者Jeremy Parker
相关产品推荐
相关产品推荐

