🔪

Flutter/DartでListの要素を分割する方法3選

1 min read

こんにちは!Altive株式会社でFlutterアプリ開発を行なっている村松龍之介(@riscait)です😸


DartのList型の中身を分割しつつ、リスト化できる書き方を調べて3つの書き方を学んだので、備忘録がてら書き残します。

結論

quiver パッケージの partition 関数を使おう!
パッケージに依存したくない場合は、 takeskip で要素を取り出そう!

手法3選

1. List.sublist(start, end) を使用する方法

for文で回して、内部で sublist 関数を使って範囲内の要素をリスト化しています。

2. List.skip(count), List.take(count) を使用する方法

今度は do-while 文を使用しています。
do の中で skiptake を使用して分割したい要素を取得しています。
こっちの方が読みやすい感じがしますね。

3. quiverパッケージの partition() を使用する方法

これが一番簡単です。
Google製の Quiver というDart用のユーティリティパッケージがあります。

https://pub.dev/packages/quiver

パッケージを追加します。

下記のコマンドを実行すると、 pubspec.yamldependencies にインストール可能な最新バージョンのパッケージがインストールされます。
(もしくは、直接 dependenciesquiver: any を追加して flutter pub get しましょう)

flutter pub add quiver

パッケージをアプリに追加したら、使いたいファイルに import 'package:quiver/iterables.dart' を書いて、
partition 関数を使いましょう👍

import 'package:quiver/iterables.dart';

final items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'];
final chunkSize = 3;
// [[a, b, c], [d, e, f], [g, h, i], [j, k]]
final chunkedItems = pertition(items, chunkSize);

1行で期待通りの動きをしてくれました🥺

(内部的には Iteratorを実装した _PartitionIteratorで while を使用しているようでした)

https://github.com/google/quiver-dart/blob/master/lib/src/iterables/partition.dart

最後に

個人的には、他にも便利な関数が多数使える quiver パッケージを利用していきたいと思いました。
しかし、何らかの理由でパッケージに依存したくない場合は do-while, take, skip を使おうと思います。

最後までご閲覧ありがとうございました🙌


Altive株式会社では、Flutterアプリ開発を承っております。
また、ともに働くFlutterアプリ開発者も募集中です😊

Riverpod x Flutterの本も書きました👍

https://zenn.dev/riscait/books/flutter-riverpod-practical-introduction