copyRange<T> 静态方法
将一个列表的某个范围复制到另一个列表中。
这是一个实用函数,可以用来实现如 setRange 之类的功能。
start
到 end
的范围必须要是 source
的有效范围,且从位置 at
开始必须有足够的空间容纳 end - start
个元素。如果省略了 start
,则默认为 0。如果省略了 end
,则默认为 source
.length。
如果 source
和 target
是同一个列表,那么会尊重重叠的源和目标范围,使得目标范围最终包含源范围的初始内容。否则,元素复制的顺序不能保证。
实现
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];
}
}
}