重新排列对象阵列Flutter



对象的数组

输入:

[
{id:1,order:1},
{id:2,order:null},
{id:3,order:0},
{id:4,order:null},
{id:5,order:3}
]

输出:

[
{id:3,order:0},
{id:1,order:1},
{id:2,order:null},
{id:5,order:3},
{id:4,order:null}
]

考虑模型

Item(int id,int? Order)

默认情况下,订单为空,这些位置将被保留,具有订单的对象将被上移或下移。

如果数组类型为Map-,请尝试此操作

arrayOfObjects.sort((a, b) => a['order'].compareTo(b['order']));

或者,如果它持有具有订单属性的Item类

arrayOfObjects.sort((Item a, Item b) => a.order.compareTo(b.order));

注意-在运行排序之前,您可以删除订单为空的项目。

示例

arrayOfObjects.removeWhere((item)=> item.order == null);

双迭代基于处理null的数组的长度。解决方案

import 'package:collection/collection.dart';
class Item {
int? _id;
int? _order;
Item({int? id, int? order}) {
this._id = id;
this._order = order;
}
int? get id => _id;
set id(int? id) => _id = id;
int? get order => _order;
set order(int? order) => _order = order;
Item.fromJson(Map<String, dynamic> json) {
_id = json['id'];
_order = json['order'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this._id;
data['order'] = this._order;
return data;
}
}

List<Item> reorder(List<Item> it){
var tempData = it;
tempData.forEach((_){
tempData.forEachIndexed((index,val){
///Remove original and replace
var ind = val.order;
if(ind!=null){

///Check if it is at the Proper Position
if (index == ind) {
return;
}
var first = it.removeAt(index);
it.insert(ind as int, first);
}

});
});
return it; 
}
void main() {
var list = [
Item(id: 1, order: 1),
Item(id: 3, order: 2),
Item(id: 2, order: 7),
Item(id: 4, order: null),
Item(id: 5, order: null),
Item(id: 6, order: null),
Item(id: 7, order: 6),
Item(id: 8, order: 4)
];
list.forEach((it) => print('${it.id} ->${it.order}'));

var first = reorder(list);

print('n');
first.forEach((it) => print('${it.id} ->${it.order}'));
///Stack List
}

最新更新