基于布尔值的排序列表

nimi0112

我想使用Comparable的布尔值对列表进行排序dart我尝试了以下操作,但无法执行。

在列表中,true应排在列表其余第一位的所有元素应保持原样。

class Item implements Comparable<Item> {
  int id;
  String name;
  int price;
  bool isAvailable;

  Item({this.id, this.name, this.price, this.isAvailable = false});

  @override
  int compareTo(Item other) {
    if (isAvailable) {
      return -1;
    }

    return 0;
  }
}

void main() {
  Item item = new Item(id: 1, name: "Item one", price: 1000);
  Item item2 = new Item(id: 2, name: "Item two", price: 2000);
  Item item3 =
      new Item(id: 3, name: "Item three", price: 500, isAvailable: true);

  List<Item> items = [item, item2, item3];

  items.sort();

  items.forEach((Item item) {
    print('${item.id} - ${item.name} - ${item.price}');
  });
}

这应该打印

3 - Item three - 500
1 - Item one - 1000
2 - Item two - 2000

3 - Item three - 500应该先来,因为true它是印刷品

1 - Item one - 1000
2 - Item two - 2000
3 - Item three - 500

我究竟做错了什么?

此代码可以在Dartpad上直接运行

詹姆斯德林

一个compareTo实现应该是自反,反对称和传递违反这些属性可能会导致排序结果不一致。

按照书面规定,compareTo如果两个元素this.isAvailable为假,则始终将其按排序顺序视为“相等” 但是,如果other.isAvailable是真的呢?

如果compareTo正确实施而不尝试采用快捷方式,则排序应该可以工作

  int compareTo(Item other) {
    if (isAvailable == other.isAvailable) {
      return 0;
    } else if (isAvailable) {
      return -1;
    }
    return 1;
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

返回基于布尔值的数字序列的更优雅的方法?

来自分类Dev

基于布尔值的对象的Swift排序数组

来自分类Dev

基于成员布尔值的向量中的C ++排序对象

来自分类Dev

隐藏基于布尔值true false jsp的列表项

来自分类Dev

按布尔值排序

来自分类Dev

基于字典值的排序列表

来自分类Dev

LINQ:嵌套排序/布尔值排序

来自分类Dev

基于布尔值的线程阻塞

来自分类Dev

基于变量反转布尔值

来自分类Dev

基于布尔值隐藏键值对

来自分类Dev

返回布尔值的序列图

来自分类Dev

MySQL按布尔值tinyint排序

来自分类Dev

MySQL按布尔值tinyint排序

来自分类Dev

按集合内的布尔值排序

来自分类Dev

基于数据属性值的jQuery排序列表

来自分类Dev

Angular JS-基于下拉列表的布尔值显示选择选项

来自分类Dev

基于数组的排序列表

来自分类Dev

位向量与布尔值性能列表

来自分类Dev

在Python列表中处理布尔值

来自分类Dev

Python列表附加True布尔值

来自分类Dev

空列表和布尔值

来自分类Dev

基于键排序列表的python排序列表

来自分类Dev

基于键排序列表的python排序列表

来自分类Dev

在基于时间的线图上绘制布尔值

来自分类Dev

基于布尔值的ng-grid中的颜色图标

来自分类Dev

Postgres:基于布尔值的SELECT列名称

来自分类Dev

基于布尔值列Altair的堆叠条形图

来自分类Dev

开玩笑:期望或期望...不基于布尔值

来自分类Dev

基于布尔值扩展TSQL Select语句