簡體   English   中英

在 Dart 中使單個項目可迭代的最有效方法是什么?

[英]What's the most efficient way to make a single-item Iterable in Dart?

在 Dart 中,可以通過多種方式創建單項迭代。

['item']; // A single-item list

Iterable.generate(1, (_) => 'item'); // A single-item generated Iterable

在創建和迭代期間,這些方法在速度和 memory 使用方面如何比較?

該清單可能是最便宜的。

至少如果您使用List.filled(1, 'item')使其成為固定長度的列表,那么這些列表比可增長列表便宜。

您需要以某種方式存儲一個元素。 將其直接存儲在列表中需要一個引用。 然后列表可能會在長度(1)上多花一個單元格。

最重要的是,編譯器知道平台列表,並且如果他們能夠認識到這是他們正在處理的內容,那么他們的效率就會更高。 他們可能不能在這里,因為您需要一個可迭代的傳遞給期望任意可迭代的東西,否則單個元素可迭代是沒有用的。

列表是可變的,這有點令人擔憂。 如果您在編譯時知道元素,則const ['item']會更好。

否則Iterable.generate(1, constantFunction)不是一個壞選擇,如果你知道編譯時的值並且可以寫一個String constantFunction() => 'item'; static 或頂級 function 可以高效撕下。

也就是說,這里的所有事情對於性能來說都不是重要,除非您要在程序的單次運行中多次執行此操作。 時間上的差異將是最小的。 memory 使用的差異可能小於任何一種方法創建的Iterable的大小。

通過不在可迭代對象上使用for (var e in iterable)可以節省更多,例如使用for (var i = 0; i < list.length; i++) { var e = list[i]; ... } for (var i = 0; i < list.length; i++) { var e = list[i]; ... }相反,如果您可以確保可迭代始終是一個列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM