Dart リスト(配列)を結合する
Dartで、リスト(配列)を結合するコードを記述してます。方法は幾つかありそうですが、ここでは「+」演算子を使用した方法や「…」を使用する方法などの4つの方法を掲載してます。それぞれの実行時間を比較した結果も掲載してます。
環境
- OS windows11 home
- Dart 2.18.1
リスト(配列)を結合する
リスト(配列)を結合するには、以下の4つの方法があります。
リスト + リスト + リスト
[...リスト,...リスト,...リスト]
[リスト,リスト,リスト].expand((x) => x).toList()
リスト..addAll(リスト)..addAll(リスト)
実際に、使用して結合してみます。
void main() {
var list1 = [1, 2, 3];
var list2 = [4, 5, 6];
var list3 = [7, 8, 9];
print(list1 + list2 + list3); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
print([...list1, ...list2, ...list3]); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
print([list1, list2, list3].expand((x) => x).toList()); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list1..addAll(list2)..addAll(list3)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
}
実行結果を見ると、結合されていることが確認できます。
パフォーマンス
パフォーマンスは「…」を使用したスプレッド構文が一番良さそうです。
ここでは「benchmark_harness」を使用して計測してます。
「pubspec.yaml」に「benchmark_harness」を追加すれば使用可能です。
name: sample
dependencies:
benchmark_harness: any
environment:
sdk: '>=2.10.0 <3.0.0'
実際に計測するコードとなります。
import 'package:benchmark_harness/benchmark_harness.dart';
var list1 = [1, 2, 3];
var list2 = [4, 5, 6];
var list3 = [7, 8, 9];
class Benchmark1 extends BenchmarkBase {
const Benchmark1() : super('+');
@override
void run() {
final newList = list1 + list2 + list3;
}
}
class Benchmark2 extends BenchmarkBase {
const Benchmark2() : super('...');
@override
void run() {
final newList = [...list1, ...list2, ...list3];
}
}
class Benchmark3 extends BenchmarkBase {
const Benchmark3() : super('expand');
@override
void run() {
final newList = [list1, list2, list3].expand((x) => x).toList();
}
}
class Benchmark4 extends BenchmarkBase {
const Benchmark4() : super('addAll');
@override
void run() {
final newList = list1..addAll(list2)..addAll(list3);
}
}
void main() {
Benchmark1().report();
Benchmark2().report();
Benchmark3().report();
Benchmark4().report();
}
実行結果(us : マイクロ秒)
<1回目>
+(RunTime): 3.269116 us.
...(RunTime): 2.522362477637522 us.
expand(RunTime): 9.045374773126134 us.
addAll(RunTime): 7.318390590804705 us.
<2回目>
+(RunTime): 3.098101333333333 us.
...(RunTime): 2.5072475 us.
expand(RunTime): 10.892123100599923 us.
addAll(RunTime): 3.6738611630694185 us.
<3回目>
+(RunTime): 3.104633333333333 us.
...(RunTime): 2.415287584712415 us.
expand(RunTime): 9.12561155954413 us.
addAll(RunTime): 2.645627 us.
-
前の記事
Android Studio 行をそのままコピーするショートカットキー 2022.11.07
-
次の記事
Google スライド リンクを挿入・編集するショートカットキー 2022.11.07
コメントを書く