copyRange<T> 静态方法

void copyRange<T>(
  1. List<T> target,
  2. int at,
  3. List<T> source,
  4. [int? start,
  5. int? end]
)

将一个列表的某个范围复制到另一个列表中。

这是一个实用函数,可以用来实现如 setRange 之类的功能。

startend 的范围必须要是 source 的有效范围,且从位置 at 开始必须有足够的空间容纳 end - start 个元素。如果省略了 start,则默认为 0。如果省略了 end,则默认为 source.length。

如果 sourcetarget 是同一个列表,那么会尊重重叠的源和目标范围,使得目标范围最终包含源范围的初始内容。否则,元素复制的顺序不能保证。

实现

static void copyRange<T>(List<T> target, int at, List<T> source,
    [int? start, int? end]) {
  start ??= 0;
  end = RangeError.checkValidRange(start, end, source.length);
  if (end == null) {
    // TODO(dart-lang/language#440): Remove when promotion works.
    throw "unreachable";
  }
  int length = end - start;
  if (target.length < at + length) {
    throw ArgumentError.value(target, "target",
        "Not big enough to hold $length elements at position $at");
  }
  if (!identical(source, target) || start >= at) {
    for (int i = 0; i < length; i++) {
      target[at + i] = source[start + i];
    }
  } else {
    for (int i = length; --i >= 0;) {
      target[at + i] = source[start + i];
    }
  }
}