繁体   English   中英

Flutter 按值排序列表

[英]Flutter sort list by value

我如何根据列表中的值之一对我的列表进行排序?

这是我的清单的一个例子

  List data = [
    {'name': 'Example1', 'value1': 10, 'value2': 0},
    {'name': 'Example2', 'value1': 0, 'value2': 10},
    {'name': 'Example3', 'value1': 15, 'value2': 5},
    {'name': 'Example4', 'value1': 22.5, 'value2': 10},
];

所以我称之为

           Column(
            children: data.map((info) {
          return Container(
            child: SizedBox(
              child: Row(
                children: [
                  Text(info['name'],),
                  Text(info['value1'],),
                ],
              ),
            ),
          );
        }).toList())

这是我的列表从上到下列出的方式

我怎样才能按价值排序?

如果值为 0,如何隐藏条目?

list.sort() 需要一个比较器函数。 比较器从列表中获取两个值并比较它们以查看是否需要交换。 根据您返回的内容,您可以控制列表的排序方式。 当返回正值时,交换发生,否则不发生。

在您的情况下,假设您想按升序使用 value1 进行排序。 您需要告诉比较器在 a > b 时返回正值。 如果你想要降序,当 b > a 时返回一个正值:

List data = [
    {'name': 'Example1', 'value1': 15},
    {'name': 'Example2', 'value1': 10},
    {'name': 'Example3', 'value1': 5},
    {'name': 'Example4', 'value1': 0},
];
  
// sort in place w.r.t. value1
// CompareTo method just returns first value - second value in case of double
// Try returning b['value1'].compareTo(a['value1']) or b['value1'] - a['value1'] and the result should be in descending order w.r.t value1 property.
 
data.sort((a,b) => a['value1'].compareTo(b['value1'])); // You can also write a['value1'] - b['value1']
print(data.toString());
 
// To filter (remove all those elements whose value1 is 0)
List filtered = data.where((a) => a['value1'] != 0).toList(); // Where method takes a function which should return true if you want to keep the item in the filtered list.
print(filtered.toString()); // filtered is the new list with all those elements removed.

这是输出:

[{name: Example4, value1: 0}, {name: Example3, value1: 5}, {name: Example2, value1: 10}, {name: Example1, value1: 15}]
[{name: Example3, value1: 5}, {name: Example2, value1: 10}, {name: Example1, value1: 15}]

更新:

您可以像这样使用过滤器:

Column(
        children: data
        .where((d) => d['value1'] != 0) // <----- Here :)
        .map((info) {
      return Container(
        child: SizedBox(
          child: Row(
            children: [
              Text(info['name'],),
              Text(info['value1'],),
            ],
          ),
        ),
      );
    }).toList())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM