23

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

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

2 回答 2

27

最明显的区别是take()只能在开始时使用元素,但您可以将其与skip()like组合list.skip(3).take(5)以获得类似的行为。
list.take()是惰性评估的,它适用于函数式编程,并且如果元素以后没有实际迭代可能会更有效。
list.take()当列表中的元素没有请求的那么多时,也可以容忍。take()返回尽可能多的可用,getRange()抛出。 take()适用于所有可迭代对象(也适用于流),getRange()默认情况下仅在列表中可用。

于 2015-08-03T16:45:24.540 回答
9

take()和之间有区别getRange()

拿()

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

您可以获得使用的第一个计数List项目take(count)

var sportsList = ['cricket', 'tennis', 'football'];

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

获取范围()

此方法以与给定列表中相同的顺序返回指定范围内的元素[start][end]请注意,开始元素是包容性的,而结束元素是排斥性的。

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

 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]
于 2021-04-22T08:40:54.113 回答