如何在 Dart 中对 List<File> 进行排序,末尾为空对象

问题描述 投票:0回答:3

开始着手 Flutter 进行研究项目,我想知道如何对文件列表进行排序。

确实,我的程序有一个包含 4 个文件的列表,如下所示:

List<File> imageFiles = List(4);

这个初始化实际上意味着我的列表是这样的:

[null,null,null,null]

当用户执行操作时,此列表可能会填满。然而,用户可以随时删除文件,这会给我们带来以下情况:

[file A, null, null, file d]
.

我的问题是,当删除到达时如何对列表进行排序,以便获得一个空对象始终位于最后的列表(

[file A, file D, null, null]
)。

我已经看过很多主题,但它们从来不涉及 DART。

预先感谢您的帮助。

list sorting flutter dart
3个回答
10
投票

您可以使用

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

    
您可以尝试这个:

Dartpad

8
投票

这个地方最后全部为空。 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; })

对于任何感兴趣的人,我为 Jorge 的答案做了一个扩展函数。

1
投票

© www.soinside.com 2019 - 2024. All rights reserved.