我的数据结构非常大,需要分配和传递。我还需要进入清单。有时,当列表位于标量容器中时,$aList.elems
会说1
,因为列表中只有一个元素。要进入列表,(@$aList).elems
将在列表中提供正确数量的元素。
我的问题是:频繁使用@$aList
是否存在性能劣势,如果存在性能问题,是否会分配@b = @$aList
并使用@b
来解决问题?即,从列表切换到数组上下文会有加速吗?
感谢。
答案 0 :(得分:5)
$x.elems
和(@$x).elems
应返回相同的号码。
所以听起来你的代码中有一个错误你应该修复......可能与Seq
缓存相关的东西,见下文。
至于性能问题,我没有运行基准,但请注意@$x
只是调用$x.cache
,其中...... {/ p>
$x
是List
或子类(包括Array
),则只返回对象本身(没有周围的项容器),这应该很快。$x
是另一种类型的对象,则从中创建一个新的List
并返回该值,这可能会有更多的开销,具体取决于类型。例如。:
"a"
- > 列表 ("a",)
1..10
- > 列表 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
(1, 2).Seq
- > 列表 (1, 2)
List
时创建的.cache
对象,并在后续调用中继续返回相同的对象。这就是为什么该方法首先被称为.cache
。(请注意,.list
方法也存在,它与.cache
的功能相同,只是它不记得Seq
案例中的列表。)