在 Flutter/Dart 中映射多个列表?

Posted

技术标签:

【中文标题】在 Flutter/Dart 中映射多个列表?【英文标题】:Mapping Multiple Lists in Flutter/Dart? 【发布时间】:2018-04-01 02:06:22 【问题描述】:

我有 SWIFT 代码,其中我映射了一组具有相同数量元素的列表,其中 1 是一个整数列表,它们按降序映射。这是我的 SWIFT 代码...

class Video

    let videoID: String
    let rank: Int
    let title: String
    let imageString: String

    init(videoID: String, rank: Int, title: String, imageString: String)
    
        self.videoID = videoID
        self.rank = rank
        self.title = title
        self.imageString = imageString
    


var videos = [Video]()

videos.sort  $0.rank < $1.rank 

self.vidTitleArray = videos.map  $0.title 
self.vidRankArray = videos.map  $0.rank 
self.vidIdArray = videos.map  $0.videoID 
self.vidImageArray = videos.map  $0.imageString 

这是我在 Flutter 中的位置,但我在前进时遇到了错误......

class videos
  String videoId;
  int rank;
  String title;
  String imageString;

  videos(this.videoId, this.rank, this.title, this.imageString);

如何从类构造函数中创建一个list,然后按降序重新排列映射到排名的所有元素?

***** 选项 *****

这是我的代码,没有使用 Video 类。我使用SplayTreeMap 对其进行了正确排名,但如果Value 始终相同,它只会带回1 个节点。有没有办法以Value 降序映射所有 4 个地图?

映射 myMap = event.data.snapshot.value; //存储每张地图

                          var titles = myMap.values;

                          List onesTitles = new List();
                          List onesIds = new List();
                          List onesImages = new List();
                          List onesRank = new List();

                          for (var items in titles) 
                            onesTitles.add(items['vidTitle']);
                            onesIds.add(items['vidId']);
                            onesImages.add(items['vidImage']);
                            onesRank.add(items['Value']);
                          

                          names = onesTitles;
                          ids = onesIds;
                          numbers = onesRank;
                          vidImages = onesImages;

【问题讨论】:

我已经编辑了答案,以便更清楚地了解如何使用 List.sort()。 【参考方案1】:

您可以为此目的使用List.sort(),我创建了一个自定义示例,我在其中硬编码了Videos 类的3 个实例,然后将它们以List 的升序添加到我的构建方法中。使用List.sort()compareTo,我能够按降序重新排列它们。

List<Videos> myList = [_firstVideos, _secondVideos, _thirdVideos];
sort() 
      for (var video in myList) 
        print(video.rank); ///prints 1 2 3 
      
      myList.sort((y, x) => x.rank.compareTo(y.rank));

      for (var video in myList) 
        print(video.rank);  ///prints 3 2 1
      
    

...

import 'package:flutter/material.dart';


    void main()
      runApp(new MaterialApp(home: new MyApp(),));
    

    class MyApp extends StatelessWidget 

      Videos _firstVideos = new Videos(
        videoId: "0001",
        rank: 1,
        title: "My First Video",
        imageString: "My First Image",
      );
      Videos _secondVideos = new Videos(
        videoId: "0002",
        rank: 2,
        title: "My Seocnd Video",
        imageString: "My Second Image",
      );

      Videos _thirdVideos = new Videos(
        videoId: "0003",
        rank: 3,
        title: "My Third Video",
        imageString: "My Third Image",
      );

      @override
      Widget build(BuildContext context) 
        List<Videos> myList = [_firstVideos,_secondVideos,_thirdVideos];
        sort()
        
          myList.sort((y,x)=>x.rank.compareTo(y.rank));

        print(myList[0].title);
        
        return new Scaffold(
          body: new Center(
            child: new FlatButton(onPressed: sort, child: new Text("Sort")),
          ),
        );
      
    


    class Videos
      String videoId;
      int rank;
      String title;
      String imageString;

      Videos(this.videoId, this.rank, this.title, this.imageString);
    

【讨论】:

@azia 请查看我添加的其他OPTION。我正在尝试在不构建 Video 列表的情况下进行排序

以上是关于在 Flutter/Dart 中映射多个列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Dart / flutter中映射和显示嵌套的JSON?

(Flutter/Dart) 如何修复使用 [ ] 显示列表中的数字

列表视图中的收藏按钮问题 Flutter/Dart

Flutter(Dart) 无法从不可修改列表中删除

Flutter / Dart / Firebase - 流返回空列表

Flutter/Dart:如何获取键等于的列表值