[英]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.