在Dart中列出take()与getRange()

时间:2015-08-03 16:34:52

标签: list collections dart

我想要一些List的第一个 n 元素。据我所知,我有两个选择:take(n)getRange(0, n)

  1. 他们之间有什么区别?
  2. 我什么时候会使用另一个(假设我总是想要第一个 n 元素)?

2 个答案:

答案 0 :(得分:3)

最明显的区别是take()只能在开头使用元素,您可以将其与skip() list.skip(3).take(5)结合使用,以获得类似的行为。
list.take()是懒惰的评估,它与功能样式编程很好地协作,如果元素实际上没有被迭代,可能会更有效率。
如果列表中的元素数量不足,则list.take()也可以容忍。 take()会返回尽可能多的getRange()次投放。 take()可用于所有迭代(也称为流),getRange()仅在列表中默认可用。

答案 1 :(得分:2)

take()getRange() 之间存在差异

take()

此方法返回从索引 0 开始直到给定列表提供的计数的可迭代对象。

您可以使用 List

获取 take(count) 的第一个计数项
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]