【发布时间】:2015-08-03 16:34:51
【问题描述】:
我想要一些List 的前n 个元素。据我所知,我有两个选择:take(n) 和 getRange(0, n)。
- 它们有什么区别?
- 我什么时候会使用一个而不是另一个(假设我总是想要前 n 个元素)?
【问题讨论】:
标签: list flutter dart collections
我想要一些List 的前n 个元素。据我所知,我有两个选择:take(n) 和 getRange(0, n)。
【问题讨论】:
标签: list flutter dart collections
最明显的区别是take() 只能在开头使用元素,您可以将它与skip() 结合使用,例如list.skip(3).take(5) 以获得类似的行为。list.take() 是惰性评估,效果很好使用函数式编程,如果以后实际上不迭代元素,可能会更有效。list.take() 在列表中没有请求的元素数量时也可以容忍。 take() 尽可能多地返回,getRange() 抛出。
take() 可用于所有可迭代对象(也可用于流),getRange() 默认情况下仅可用于列表。
【讨论】:
take() 和 getRange() 之间存在差异
take()
此方法返回从索引 0 到给定列表提供的计数的可迭代对象。
您可以使用take(count) 获取List 的第一个计数项
var sportsList = ['cricket', 'tennis', 'football'];
print(sportsList.take(2)); // (cricket, tennis)
getRange()
此方法以与给定列表中相同的顺序返回指定范围[start] 到[end] 中的元素。请注意,开始元素是包含的,而结束元素是排斥的。
您可以通过List中使用getRange()方法指定范围来获取一组项目。
var myList = [1, 2, 3, 4, 5];
print(myList.getRange(1,4)); // (2, 3, 4)
and also use
var myList = [0, 'one', 'two', 'three', 'four', 'five'];
myList.getRange(1, 3).toList(); // [one, two]
【讨论】:
getRange 函数后使用 myList 列表变量,那么他们将不得不将结果分配给相同或另一个变量以用于进一步的编程,例如。 myList = myList.getRange(1, 3).toList();print(myList);.