Dart/Flutter中如何按name属性对Contact实例列表做A-Z升序排序
按name属性A-Z升序排列Contact列表的实现方法
Dart的List类型内置sort()方法,支持传入自定义比较器实现指定规则排序。由于你定义的Contact类中name为可空字符串类型,排序时需要额外处理空值场景,示例代码如下:
// 假设你已初始化得到Contact类型的列表 List<Contact> contacts = [...]; contacts.sort((a, b) { // 处理name为空的情况:空name默认排到列表末尾,如需排到开头可调整返回值 if (a.name == null && b.name == null) return 0; if (a.name == null) return 1; if (b.name == null) return -1; // 两个name都不为空时按A-Z升序比较 return a.name!.compareTo(b.name!); });
如果需要忽略大小写排序(比如Apple和ant视为同级排序),可以把最后一行比较逻辑修改为:
return a.name!.toLowerCase().compareTo(b.name!.toLowerCase());
注意:sort()方法会直接修改原列表,如果需要保留原列表不变,可以先拷贝一份再执行排序:
final sortedContacts = List<Contact>.from(contacts)..sort((a, b) { if (a.name == null && b.name == null) return 0; if (a.name == null) return 1; if (b.name == null) return -1; return a.name!.compareTo(b.name!); });
内容的提问来源于stack exchange,提问作者Dedi
相关产品推荐
相关产品推荐

