排序列表颤动
Posted
技术标签:
【中文标题】排序列表颤动【英文标题】: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)=> a["fid"].compareTo(b["fid"]));
【参考方案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呢?以上是关于排序列表颤动的主要内容,如果未能解决你的问题,请参考以下文章