💘

List, Map, Record, forを探求する

2024/05/02に公開

🤔やってみたいこと

最近アルゴリズムのお勉強をしてます。といってわかってるか疑問???

新しい文法を試しながら、思った通りのロジックをかけるかやってみました。

Dart3.0のRecordを使ってみる。List<String>の変数を2個定義して、(a, b)って感じで代入して、後で、値を取り出して使ってみました。Iterable<MapEntry<K, V>> get entries;を使わないとうまくできない???

https://api.dart.dev/stable/3.3.4/dart-core/Map/entries.html
https://api.dart.dev/stable/3.3.4/dart-core/Map/Map.fromEntries.html

解説が親切ではなかったので、AIに聞いてみたらそれぽいこと教えてくれた。

Iterable<MapEntry<K, V>> get entries;は、マップのすべてのエントリ(キーと値のペア)を取得するためのgetterメソッドです。

ここで、IterableはDartのコレクション型で、順序付けられたアイテムのグループを表します。MapEntry<K, V>はマップの一つのエントリを表し、Kはキーの型、Vは値の型を表します。

したがって、このメソッドはマップのすべてのエントリを順序付けられた形で返します。これにより、マップのすべてのエントリを一度に操作したり、特定の条件に一致するエントリを検索したりすることができます。

🚀やってみたこと

[使用例]

void main() {
  final moonCount = <String, int>{
    'Mercury': 0,
    'Venus': 0,
    'Earth': 1,
    'Mars': 2,
    'Jupiter': 79,
    'Saturn': 82,
    'Uranus': 27,
    'Neptune': 14
  };
  final map = Map.fromEntries(moonCount.entries);
  print(map);
}

https://dart.dev/language/records

Listで、for文を使えなかった???
recordをList -> Mapに変換して使ってみた!

main.dart
void main() {
  final f = ["🍎", "🍌", "🍒"];
  final fn = ["apple", "banana", "cherry"];
  final items = (f, fn);
  print(items); // ([🍎, 🍌, 🍒], [apple, banana, cherry]
  // items as Map
  final itemsMap = Map.fromIterables(f, fn);
  print(itemsMap); // {🍎: apple, 🍌: banana, 🍒: cherry}
  for(var i in itemsMap.entries) {
    final ik = i.key;// 🍎
    final iv = i.value;// apple
    final ikv = (ik, iv);// (🍎, apple)
    print(ikv);// (🍎, apple)
  }
}

Flutterで使うなら、Widgetで使う。こんな風に書けばUIに表示できた。ListをMapに変換して、forでループして、keyとvalueを取得して、Text Widgetで表示してみた。こんなときって、for文が良さそうだから使ってみた。

import 'package:flutter/material.dart';

class RecordList extends StatelessWidget {
  const RecordList({super.key});

  
  Widget build(BuildContext context) {
    List<String> ft = ["apple", "banana", "cherry"];
    List<String> fv = ["🍎", "🍌", "🍒"];
    final itemsMap = Map.fromIterables(ft, fv);

    return Scaffold(
      appBar: AppBar(
        title: const Text('Record List'),
      ),
      body: Center(
        child: Column(
          children: [
            for(var i in itemsMap.entries)
              Text('${i.key} ${i.value}')
          ],
        ),
      ),
    );
  }
}

このコードimportして実行する。

main.dart
import 'package:flutter/material.dart';
import 'package:widget_cookbook/record_list/record_list.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: RecordList(),
    );
  }
}

🙂最後に

今回は、List, Map, Record, forを使ったビジネスロジックを試してみました。もっとList, Mapの使い方を理解すればすごいロジック作れるんだろうなと思いました。競プロするとアルゴリズムがわかるそうですが、難しいので、あまり時間使いたくないですね笑
個人開発に時間を私は使いたい方💦

Discussion