Flutter/DartでListの要素を分割する方法4選
こんにちは、Flutterでのアプリ開発をメインとしている「Altive株式会社」の村松龍之介(@riscait)です!
DartのList型の中身を分割しつつ、リスト化できる方法を備忘録がてら書き残します。
結論
collection
パッケージの slices
関数か、 quiver
パッケージの partition
関数を使おう!
パッケージに依存したくない場合は、 take
と skip
で要素を取り出そう!
手法4選
1. List.sublist(start, end) を使用する方法
for文で回して、内部で sublist
関数を使って範囲内の要素をリスト化しています。
2. List.skip(count), List.take(count) を使用する方法
今度は do-while
文を使用しています。
do
の中で skip
と take
を使用して分割したい要素を取得しています。
こっちの方が読みやすい感じがしますね。
3. quiverパッケージの partition() を使用する方法
Google製の Quiver というDart用のユーティリティパッケージがあります。
パッケージを追加します。
最新版の quiver
パッケージを pubspec.yaml
の dependencies
に追加しましょう。
flutter pub add quiver
partition(iterable, size)
メソッドを使いましょう👍
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 = partition(items, chunkSize);
1行で期待通りの動きをしてくれました🥺
(内部的には Iteratorを実装した _PartitionIteratorで while
を使用しているようでした)
collection
パッケージの slices(length)
メソッドを使用する方法
4. Dart.dev製の collection
という、コレクションを簡単に扱うためのパッケージがあります。
firstOrNUll
など Null Safety
で有用なユーティリティが入っているので、すでに採用しているプロジェクトも少なくないのでしょうか?
パッケージを追加します。
最新版の collection
パッケージを pubspec.yaml
の dependencies
に追加しましょう。
flutter pub add collection
slices(length)
メソッドを使いましょう👍
import 'package:package:collection/collection.dart';
final items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'];
final sliced = items.slices(3);
print(sliced); // ([a, b, c], [d, e, f], [g, h, i], [j, k])
1行で期待通りの動きをしてくれました🥺
最後に
個人的には、すでに採用していることが多く、Dart.devのパッケージでも collection
の slices(length)
メソッドを利用していきたいと思いました!
しかし、何らかの理由でパッケージに依存したくない場合は do-while, take, skip
を使うと思います。
最後までご閲覧ありがとうございました🙌
宣伝
Altive株式会社では、Flutterアプリの開発・運営を承っております。
お気軽にお問い合わせください🫡
Riverpod の実践入門本を公開中です📘
Discussion
有益な記事ありがとうございます!
恐縮ではございますが、
quiverライブラリの説明のコード
partitionではなくpertitionとタイポされておられます。
えんでばーさん、ありがとうございます!
タイポ修正しました🙌
記事執筆時点では無かったぽいのですが、今だとcollectionパッケージのslicesも良さそうです👍
K9iさん、教えていただきありがとうございます!
記事にも追記しました🙌