# setRange method

void setRange (int start, int end, Iterable<E> iterable, [ int skipCount = 0 ])
override

Copies the objects of `iterable`, skipping `skipCount` objects first, into the range `start`, inclusive, to `end`, exclusive, of the list.

    List<int> list1 = [1, 2, 3, 4];
    List<int> list2 = [5, 6, 7, 8, 9];
    // Copies the 4th and 5th items in list2 as the 2nd and 3rd items
    // of list1.
    list1.setRange(1, 3, list2, 3);
    list1.join(', '); // '1, 8, 9, 4'

The provide range, given by `start` and `end`, must be valid. A range from `start` to `end` is valid if `0 <= start <= end <= len`, where `len` is this list's `length`. The range starts at `start` and has length `end - start`. An empty range (with `end == start`) is valid.

The `iterable` must have enough objects to fill the range from `start` to `end` after skipping `skipCount` objects.

If `iterable` is this list, the operation copies the elements originally in the range from `skipCount` to `skipCount + (end - start)` to the range `start` to `end`, even if the two ranges overlap.

If `iterable` depends on this list in some other way, no guarantees are made.

## Implementation

    void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
      _checkRange(start, end, this.length);
      int length = end - start;
      if (length == 0) return;
      if (skipCount < 0) throw new ArgumentError(skipCount);
      var args = <dynamic>[start, length]
        ..addAll(iterable.skip(skipCount).take(length));
      callMethod('splice', args);
    }