为什么主列表会排序 -Flutter

Why does the primary list get sorted -Flutter

我正在尝试创建一个临时列表来映射它,但是当我对临时列表进行排序时,原始列表也会被排序。不知道为什么会这样。

final _colors = [
      Colors.green[600],
      Colors.green[600],
      Colors.amber[600],
      Colors.amber[600],
      Colors.amber[600],
      Colors.red[600],
      Colors.red[600]
    ];
    final _temp = _sevenRandomNumbers;
    _temp.sort((a, b) => a.compareTo(b));

    return {for (int i = 0; i < 7; i++) _temp[i]: _colors[i]};

在这种情况下,我创建了一个名为 _temp 的重复列表,但是当我按照下一行代码所示对它进行排序时,原始列表(即 _sevenRandomNumbers)也会被排序。

例如,如果最初,_sevenRandomNumbers 是 [4, 7, 3, 8, 1, 2, 5]。我设置了一个最终变量 _temp,它应该包含具有相同顺序的相同列表,即 [4、7、3、8、1、2、5]。当我对 _temp 列表进行排序时,只有这个列表应该像 [1, 2, 3, 4, 5, 7, 8] 那样排序,但在我的例子中,原始列表,即 _sevenRandomNumbers 也像这样排序。

我知道这是一个菜鸟类的问题,但我很困惑。问候。

因为你有一个基本类型列表,你可以使用 spread operator(在 Dart 2.3 中引入)来克隆你的列表:

void main() {
  final List<int> _sevenRandomNumbers = [4, 7, 3, 8, 1, 2, 5];
  final _temp = [..._sevenRandomNumbers];
  _temp.sort((a, b) => a.compareTo(b));
  print('7 random numbers: $_sevenRandomNumbers');
  print('Sorted: $_temp');
}
// 7 random numbers: [4, 7, 3, 8, 1, 2, 5]
// Sorted: [1, 2, 3, 4, 5, 7, 8]

注意:扩展运算符也适用于 MapSet