【问题标题】:Mapping Multiple Lists in Flutter/Dart?在 Flutter/Dart 中映射多个列表?
【发布时间】:2023-03-15 06:40:01
【问题描述】:

我有 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()。

标签: list sorting dart element flutter


【解决方案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 列表的情况下进行排序
猜你喜欢
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-13
  • 1970-01-01
  • 2020-12-30
  • 2020-10-24
  • 2023-02-22
  • 2020-07-04
相关资源
最近更新 更多