Как отсортировать список <Type> по списку <String> во флаттере

1

Я хочу отсортировать список атрибутов attrlist по их значению _weigth а вес будет выглядеть как weight='1',weight='2'....

class Attribute{

  String _attributerowid;
  String _grouprowid;
  String _attributename;
  String _weight;

}

List<Attribute> get attrlist => _attrlist;
Теги:
flutter
dart

3 ответа

2

Я попробовал этот код, и он работает, как вам нравится

class Attribute{

  String _attributerowid;
  String _grouprowid;
  String _attributename;
  String _weight;

  Attribute(this._attributerowid,this._grouprowid,this._attributename,this._weight);


  static List<Attribute> sort(List<Attribute> attributes){
    attributes.sort((a, b) => _compareAttributes(a, b));  
  }

  static int _compareAttributes(Attribute a, Attribute b) {
  if (a._weight != null && b._weight != null) {
    int aWeight = int.tryParse(a._weight);
    int bWeight = int.tryParse(b._weight);
    if (aWeight >= bWeight) {
      return 1;
    } else {
      return -1;
    }
  } else if (a._weight != null && b._weight == null) {
    return 1;
  } else if (a._weight == null && b._weight != null) {
    return -1;
  } else {
    return -1;
  }
}

}


void main(){
  Attribute a = Attribute('test','me','case','2');
  Attribute b = Attribute('test','me','case','1');
  Attribute c = Attribute('test','me','case','4');
  Attribute d = Attribute('test','me','case','3');
  List<Attribute> list= <Attribute>[a,b,c,d];
  Attribute.sort(list);
}
2

Это должно быть хорошо

_attrlist.sort((a, b) => {
  aWeight = int.tryParse(a._weight) ?? 0
  bWeight = int.tryParse(b._weight) ?? 0
  return aWeight.compareTo(bWeight);
})
1
import 'package:queries/collections.dart';

void main() {
  var col = Collection(attrlist);
  var asc = col.orderBy((e) => int.tryParse(e._weight));
  print(asc.toList());
  var desc = col.orderByDescending((e) => int.tryParse(e._weight));
  print(desc.toList());
}

class Attribute {
  String _attributerowid;
  String _grouprowid;
  String _attributename;
  String _weight;

  String toString() {
    return '$_attributename weight: ${_weight}';
  }
}

List<Attribute> get attrlist => () {
      var result = <Attribute>[];
      for (var i = 0; i < 5; i++) {
        var attr = Attribute();
        attr._attributename = 'Attr ${4 - i}';
        attr._attributerowid = '0';
        attr._grouprowid = '0';
        attr._weight = '$i';
        result.add(attr);
      }

      return result;
    }();

Результат:

[Attr 4 weight: 0, Attr 3 weight: 1, Attr 2 weight: 2, Attr 1 weight: 3, Attr 0 weight: 4] [Attr 0 weight: 4, Attr 1 weight: 3, Attr 2 weight: 2, Attr 3 weight: 1, Attr 4 weight: 0]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню