Dart 中的 List take() 与 getRange() 之间有什么区别

What's the difference between List take() vs. getRange() in Dart

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

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

最明显的区别是 take() 只能在开头使用元素,您可以将它与 skip() 结合使用,例如 list.skip(3).take(5) 以获得类似的行为。
list.take() 是惰性求值的,它非常适合函数式编程,如果稍后实际上没有迭代元素,可能会更有效率。
list.take() 当列表中的元素没有请求的那么多时也可以容忍。 take() returns 尽可能多,getRange() 抛出。 take() 适用于所有可迭代对象(也适用于流),getRange() 仅默认适用于列表。

take()getRange()有区别

取()

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

您可以使用 take(count)

获取 List 的第一个计数项
var sportsList = ['cricket', 'tennis', 'football'];

print(sportsList.take(2));     // (cricket, tennis)

getRange()

此方法 returns 指定范围 [start][end] 中的元素,其顺序与给定列表中的顺序相同。请注意,起始元素是包含性的,但结束元素是独占性的。

您可以通过使用getRange()方法在List中指定范围来获取一组项目。

 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]