Blue M
Blue M

Reputation: 75

Get every n number of elements in list Flutter Dart

I have a list of elements and I need to get a list containing the first element followed by every nth element afterwards. For example: given n = 3 and the list [banana, cherry, apple, pear, kiwi], I need to get the list [banana, pear]. I need this regardless of specific content, since the list depends on user input.

How do I do this using Dart?

Upvotes: 2

Views: 2574

Answers (3)

Richard Ambler
Richard Ambler

Reputation: 5040

Dart has a great set of collection operators that make this type of problem pretty straightforward to solve. For example, we could do something like:

extension X<T> on List<T> {
  List<T> everyNth(int n) => [for (var i = 0; i < this.length; i += n) this[i]];
}

main() {
  final fruit = ["banana", "cherry", "apple", "pear", "kiwi"];
  print(fruit.everyNth(3));
}

Output:

[banana, pear]

Upvotes: 2

Gwhyyy
Gwhyyy

Reputation: 9206

You can use this extension method, which will work on lists of any type:

 extension GetEveryN<T> on List<T> {
  List<T> elementsEveryN(int n) {
    List<T> result = [];
    for(int index = 0; index < length; index +=1) {
      if(index % n == 0) {
        result.add(this[index]);
      }
    }
return result;
  }
}

Trying it in an example:

List<String> list = ["banana", "cherry","apple", "pear","kiwi"];
print(list.elementsEveryN(2)); // [banana, pear]

Upvotes: 0

mngkvn
mngkvn

Reputation: 116

You may access list in dart by providing an index like for example:

List<String> fruits = ["banana","cherry","apple","pear","kiwi"];
print(fruits[0]); // Will print to the console "banana";

On your case, you are trying to access index 0 and index 3 which is "banana" and "pear".

You may create a function that accepts an index like:

String getFruit(int index, List<String> fruits) => fruits[index];
print(getFruit[0]); // Will print "banana";

or if you need to actually get the specific ranges you may use:

List<String> fruits =["banana","cherry","apple","pear","kiwi"].getRange(0,4);
// Will give you "banana","cherry","apple","pear

You may check : https://api.dart.dev/be/180791/dart-core/List-class.html for more information.

Edited answer based off the comment:

List<String> getElements(List userInput, nIndex){
 List elements = [];
 for(int x = 0; x<userInput.length;x++){
  if(x % nIndex == 0){
   elements.add(userInput[x]);
  }
 }
 return elements;
}

List fruits = ["banana","cherry","apple","pear","kiwi"];
print(getElements(fruits,2));

or you may try to look and use List.retainWhere() depending on your use case.

Upvotes: 1

Related Questions