如何在 Dart 中对 List<File> 进行排序,最后使用 null 对象
Posted
技术标签:
【中文标题】如何在 Dart 中对 List<File> 进行排序,最后使用 null 对象【英文标题】:How to sort List<File> in Dart with null objects at end 【发布时间】:2020-05-23 14:29:15 【问题描述】:开始为一个研究项目使用 Flutter,我想知道如何对文件列表进行排序。
确实,我的程序有一个这样初始化的 4 个文件的列表:
List<File> imageFiles = List(4);
这个初始化实际上意味着我的列表是这样的:[null,null,null,null]
。
当用户执行操作时,此列表可以填满。但是,用户可以随时删除文件,这会给我们以下情况:[file A, null, null, file d]
。
我的问题是,当删除到达时如何对列表进行排序,以便获得一个空对象始终位于最后的列表 ([file A, file D, null, null]
)。
我已经看过很多主题,但它们从不涉及 DART。
提前感谢您的帮助。
【问题讨论】:
应该有4个有什么原因吗?拥有最少 0 个和最多 4 个图像文件是业务要求吗? 是的,用户不能加载超过 4 个文件 我建议创建一个可以处理该问题的“值对象”。我将它添加到下面的答案中,只需一分钟 【参考方案1】:你可以试试这个:
这个地方最后都是空的。
sortedList.sort((a, b)
int result;
if (a == null)
result = 1;
else if (b == null)
result = -1;
else
// Ascending Order
result = a.compareTo(b);
return result;
)
【讨论】:
如果您希望在开头使用空值,只需将result = 1
和result = -1
行颠倒即可。【参考方案2】:
您可以使用list.sort((a, b) => a == null ? 1 : 0);
对列表进行排序
这是一个完整的示例,使用String
而不是File
,您可以在DartPad 上运行
void main()
List<String> list = List(4);
list[0] = "file1";
list[3] = "file4";
print("list before sort: $list");
// list before sort: [file1, null, null, file4]
list.sort((a, b) => a == null ? 1 : 0);
print("list after sort: $list");
// list after sort: [file1, file4, null, null]
如果业务需求最多有4个文件,我建议创建一个可以处理的值对象。 例如:
class ImageList
final _images = List<String>();
void add(String image)
if(_images.length < 4)
_images.add(image);
void removeAt(int index)
_images.removeAt(index);
String get(int index)
return _images[index];
List getAll()
return _images;
你可以这样运行它:
void main()
ImageList imageList = ImageList();
imageList.add("file1");
imageList.add("file2");
imageList.add("file3");
imageList.add("file4");
imageList.add("file5"); // won't be add
print("imagelist: $imageList.getAll()");
// imagelist: [file1, file2, file3, file4]
imageList.removeAt(2); // remove file3
print("imagelist: $imageList.getAll()");
// imagelist: [file1, file2, file4]
这将使控制变得更容易。 (此示例再次使用String
而不是File
)
【讨论】:
哇,完美运行,感谢您快速而宝贵的回答! 感谢您的编辑以及进一步的信息和帮助!以上是关于如何在 Dart 中对 List<File> 进行排序,最后使用 null 对象的主要内容,如果未能解决你的问题,请参考以下文章
如何删除 List<MyDataModel> 的重复项(Dart/Flutter)
Dart/Flutter - 如何删除 List 中 Map 元素的键值对?