You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart级联运算符操作为何修改原列表 两种排序写法差异咨询

疑问解答

1、第一种写法排序时为什么原列表也被修改了?

Dart的*级联运算符(..)*核心规则是:所有级联操作的返回值始终是最开始的调用主体,不会传递中间步骤的返回值。
你的第一种写法intList..toList()..sort()实际执行逻辑如下:

  • 第一步:取初始调用主体intList(也就是你的原列表)
  • 第二步:调用intList.toList()生成原列表的拷贝,但因为是级联调用,toList()的返回值(新拷贝)会被直接丢弃,级联操作仍然返回原intList
  • 第三步:对级联返回的原intList执行sort()方法,排序操作直接作用在原列表上,原列表自然会被修改。

2、第二种写法中实际被排序的是哪个列表?

第二种写法里普通链式调用的优先级高于级联运算符,所以intList..toList().sort()的实际执行逻辑如下:

  • 第一步:取初始调用主体intList
  • 第二步:先执行intList.toList()生成原列表的临时拷贝,再直接对这个临时拷贝调用sort()方法,排序操作完全作用在这个没有被任何变量持有的临时拷贝上,排序完成后这个临时列表就会被回收
  • 级联操作最终仍然返回原intList,所以你拿到的sorted2还是未修改的原列表。

内容的提问来源于stack exchange,提问作者iDecode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:48:04