【问题标题】:Sort list flutter排序列表颤动
【发布时间】:2021-01-09 10:59:15
【问题描述】:

我正在寻找一种最简单的方法来根据给定值对列表进行排序,而不是使用两个列表。

例如我有列表[a,b,c,d],给定值d,我可以这样排序:

但是如果我有一个对象列表,我该如何根据给定的值对其进行排序?

示例

List<ABC> list = [{fid:1,name:"a"},{fid:2,name:"b"},{fid:3,name:"c"},{fid:4,name:"d"}]

我的值为 3。我想将列表排序为

List<ABC> list = [{fid:3,name:"c"},{fid:1,name:"A"},{fid:2,name:"b"},{fid:4,name:"d"},{fid:4,name:"d"}]

【问题讨论】:

  • 那么您想要什么样的排序顺序?您发布的两个列表是完全不同的列表
  • @pskink 我想根据给定的fid对其进行排序。
  • 你已经得到了答案:list.sort((a,b)=&gt; a["fid"].compareTo(b["fid"]));

标签: list flutter dart arraylist


【解决方案1】:

您可以使用比较器对列表进行排序:

const list = [{fid:1,name:"a"},{fid:2,name:"b"},{fid:3,name:"c"},{fid:4,name:"d"}]
const fixedFid = 3

const sortedList = list.sort( (item1, item2) => { 
    if (item1.fid === fixedFid){
        return -1
    }
    if (item2.fid == fixedFid){
        return 1
    }
    return item1.fid.localeCompare(item2.fid)
})

【讨论】:

  • 但是如果我只给一个fid呢?
  • @JohnJoe 您可以创建自定义比较器并根据您的字段定义规则,因此您可以使用 fid 而不是使用 name 属性,我更新了代码
【解决方案2】:

您只需要在此处执行自定义排序,其余的将保持不变。

  List list = [{"fid":1,"name":"z"},{"fid":10,"name":"b"},{"fid":5,"name":"c"},{"fid":4,"name":"d"}];
  
  list.sort((a,b)=> a["fid"].compareTo(b["fid"]));
  
  int fidIndex=4;
  
  int indexToRemove=list.indexWhere((element) => element["fid"]==fidIndex);

  Map<String,dynamic> removedItem= list.removeAt(indexToRemove);

  list.insert(0,removedItem); 

  print(list);

【讨论】:

  • 但是如果我只给一个fid呢?
猜你喜欢
  • 2020-10-19
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 2019-09-24
  • 1970-01-01
  • 2022-06-27
相关资源
最近更新 更多