【问题标题】:Flutter sort List of Objects after two values颤振排序两个值后的对象列表
【发布时间】:2021-06-12 19:03:44
【问题描述】:

我需要对 CustomObjects 中的 List 进行排序。首先,对象应在其属性dateTime 之后排序,如果相同,则应在另一个属性compare-property 之后排序。

我搜索了 multisort 并找到了这个:

medcimentNotificationListData.sort((med1, med2) {
  var r = med1.datetime.compareTo(med2.datetime);
  if (r != 0) return r;
  return med1.mealTimeDescription.compareValue
      .compareTo(med2.mealTimeDescription.compareValue);
});

但是当在它之后打印列表时,列表没有排序..

medcimentNotificationListData.forEach((medicamentNotificationData) {
  print(
      '${medicamentNotificationData.title}, order: ${medicamentNotificationData.mealTimeDescription.compareValue}');
});

我在这里缺少什么?有没有一种简单的多排序方法?

如果您需要更多信息,请告诉我!

【问题讨论】:

  • 你做得对。有没有错误
  • @sajithlakmal 没有错误。你能解释一下这实际上在做什么吗?什么是r,为什么要比较r != 0
  • 这是一个 int ,可以是 -1、0 或 1 。如果为 -1,则意味着 a 元素将被放置在列表的 b 元素之前。 0 表示元素 `a` 和 b 相等,1 表示元素 a 在顺序中位于元素 b 之后。

标签: list flutter sorting dart array-multisort


【解决方案1】:

当您调用 sort() 方法时,函数调用 (a, b) { // your function} 应该返回 -1 、 0 或 1 。此函数在现有订单上调用。 首先,您的元素 a 是您的第一个元素,元素 b 是列表的第二个元素,作为列表的现有顺序

如果您的函数返回 -1,则意味着您的元素 a 应该放在元素 b 之前,因此它将 a 放在 b 之前,并通过将旧元素 b 替换为新元素再次调用该函数元素a 和新元素b 将是旧b 元素之后的元素。

如果您的函数返回 0,则意味着元素 ab 都是相同的。因此它将a 放在b 之前,并通过将旧元素b 替换为新元素a 来再次调用该函数。

但是当您的函数返回 1 时,这意味着您的元素 a 位于元素 b 之后。因此,通过将元素 a 替换为旧元素 a 之前的元素来再次调用该函数。

以下代码显示了这是如何工作的

final List<int> list = [1, 0, 3, 4, 2 , 6, 8, 2 , 5];
 list.sort((a,b)  {
        print("a : $a, b : $b");
        int result = a.compareTo(b);
        print('result : $result \n');
        return result;
      });

输出

a : 1, b : 0
result : 1

a : 1, b : 3
result : -1

a : 3, b : 4
result : -1

a : 4, b : 2
result : 1

a : 3, b : 2
result : 1

a : 1, b : 2
result : -1

a : 4, b : 6
result : -1

a : 6, b : 8
result : -1

a : 8, b : 2
result : 1

a : 6, b : 2
result : 1

a : 4, b : 2
result : 1

a : 3, b : 2
result : 1

a : 2, b : 2
result : 0

a : 8, b : 5
result : 1

a : 6, b : 5
result : 1

a : 4, b : 5
result : -1

【讨论】:

    猜你喜欢
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 2019-11-21
    • 2020-05-20
    • 1970-01-01
    相关资源
    最近更新 更多