quiver.iterablesの関数
quiver.iterables library - Dart API
関数
concat
iterablesを連結します。
// concat<T>(Iterable<Iterable<T>> iterables) → Iterable<T>
print(concat([
[1, 2, 3],
[-1, -2, -3]
]));
// (1, 2, 3, -1, -2, -3)
count
数値を加算して、iterablesを生成します。
// count([num start = 0, num step = 1 ]) → Iterable<num>
print(count().first);
// 0
print(count().take(5));
// (0, 1, 2, 3, 4)
print(count(3).take(5));
// (3, 4, 5, 6, 7)
print(count(3, 2).take(5));
// (3, 5, 7, 9, 11)
cycle
iterablesを循環させながら、iterablesを生成します。
// cycle<T>(Iterable<T> iterable) → Iterable<T>
print(cycle([1, 2, 3]).take(7));
// (1, 2, 3, 1, 2, 3, 1)
enumerate
iterableを入力すると、indexとvalueを扱えるiterableを生成します。
// enumerate<E>(Iterable<E> iterable) → Iterable<IndexedValue<E>>
var e = enumerate(['a', 'b', 'c']);
for (var item in e) {
print("${item.index}, ${item.value}");
}
// 0, a
// 1, b
// 2, c
print(e.first.index); // 0
print(e.first.value); // a
print(e.last.index); // 2
print(e.last.value); // c
print(e.length); // 3
generate
initial()とnext()をもとに、iterableを生成します。
// generate(dynamic initial(), dynamic next(dynamic o)) → Iterable
print(generate(() => 'Hello', (n) => '$n!'));
// (Hello, Hello!, Hello!!, Hello!!!, Hello!!!!, Hello!!!!!, Hello!!!!!!, ...)
min, max, extent
最小値、最大値、最小値と最大値。
// min<T>(Iterable<T> i, [ Comparator<T> compare ]) → T
print(min([2, 5, 1, 4]).toString());
// 1
// max<T>(Iterable<T> i, [ Comparator<T> compare ]) → T
print(max([2, 5, 1, 4]).toString());
// 5
// extent<T>(Iterable<T> i, [ Comparator<T> compare ]) → Extent<T>
var ext = extent([2, 5, 1, 4]);
print(ext.min); // 1
print(ext.max); // 5
merge
iterableを併合します。
前提は、入力のiterableがソート済みであること。
// merge<T>(Iterable<Iterable<T>> iterables, [ Comparator<T> compare ]) → Iterable<T>
var a = ['a', 'a', 'd', 'f'];
var b = ['b', 'c', 'g', 'g'];
print(merge([a, b]));
// ['a', 'a', 'b', 'c', 'd', 'f', 'g', 'g']
// This function assumes the provided iterables are already sorted according to the provided compare function. It will not check for this condition or sort the iterables.
var x = ['6', '1', '5'];
var y = ['3', '2', '4'];
print(merge([x, y]));
// [3, 2, 4, 6, 1, 5]
print(merge([x..sort(), y..sort()]));
// [1, 2, 3, 4, 5, 6]
partition
iterableを指定サイズのリストに分割します。
// partition<T>(Iterable<T> iterable, int size) → Iterable<List<T>>
print(partition([1, 2, 3, 4, 5], 3));
// ([1, 2, 3], [4, 5])
print(partition([1, 2, 3, 4, 5, 6, 7, 8, 9], 3));
// ([1, 2, 3], [4, 5, 6], [7, 8, 9])
range
指定した範囲の数値列を生成します。
// range(num start_or_stop, [ num stop, num step ]) → Iterable<num>
print(range(0, 10));
// (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
print(range(0, 10, 2));
// (0, 2, 4, 6, 8)
zip
すべてのIterableのn番目の要素を、n番目の要素として合わせ持つリストを生成します。
// zip<T>(Iterable<Iterable<T>> iterables) → Iterable<List<T>>
print(zip([
[1, 2, 3],
['a', 'b', 'c']
]));
// ([1, a], [2, b], [3, c])
編集後記
最初は関数の定義を見ても、使い方がよくわからりませんでした。
zip<T>(Iterable<Iterable<T>> iterables) → Iterable<List<T>>
「Iterable<Iterable
そして、周りに聞ける人もいない。
あれ?
もしかしてGitHubのtestフォルダーを見れば、使い方がわかるのでは?
見た。
GitHub - google/quiver-dart: A set of utility libraries for Dart
わかった。
きっと世の中のできる人は、一次情報をちゃんと見てるんでしょうね。
学び
- quiver.iterablesには便利な関数がある
- パッケージは、GitHubのtestやexampleのコードを見ると、使い方をわかる場合がある
- いくつかの関数はPythonの関数に似ている。GitHubのREADMEにもそう書いてある
concat, count, cycle, enumerate, merge, partition, range, and zip create, transform, or combine Iterables in different ways, similar to Python’s itertools.
GitHub - google/quiver-dart: A set of utility libraries for Dart
スポンサーリンク