splitOverlappingTuple2<T> function

  1. @useResult
IList<(T, T)> splitOverlappingTuple2<T>(
  1. Iterable<T> iterable
)

重複ありでリストを2つの要素ずつ取り出したリストを返す

splitOverlappingTuple2(['a', 'b', 'c', 'd']) // IList([('a', 'b'), ('b', 'c'), ('c', 'd')])

Implementation

@useResult
IList<(T, T)> splitOverlappingTuple2<T>(Iterable<T> iterable) {
  final firstOrNull = iterable.firstOrNull;
  if (firstOrNull == null) {
    return const IListConst([]);
  }
  return iterable.skip(1).fold<({T prevItem, IList<(T, T)> list})>(
    (prevItem: firstOrNull, list: const IListConst([])),
    (value, element) => (
      prevItem: element,
      list: IList([...value.list, (value.prevItem, element)]),
    ),
  ).list;
}