Home > Back-end >  Get every n number of elements in list Flutter Dart
Get every n number of elements in list Flutter Dart

Time:12-11

I have a list and I need to get every n number of elements; exemple n=3 [banana, cherry,apple, pear,kiwi]>> banana, pear. I don't know how to do that using dart. Anyone has an opinion? I need this regardless of specific content, it depends on user input.

CodePudding user response:

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.

CodePudding user response:

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]
  • Related