dart: access function from list

▼魔方 西西 提交于 2021-02-10 14:19:12

问题


Edit: i know, always call the first element on list, it isnt the point. i want to call numbers[0] func. and it regenerate new int.actually codes are not same which mine, i have a custom class which based on functions with random int and i need to use list of my custom class , so if i use func in list it will be awesome, how can i make new numbers list each time. when app start list regenerated, but i want when i call the list, it will regenerated

i want to print new int for each print but it prints same int , i tried so many thing and i cant figure out

void main{
  int ramdomint(){
    
   final _random = new Random();
    int _num =  _random.nextInt(100);
    return _num;
  }
  
  List<int> numbers=[ramdomint(),ramdomint(),ramdomint()];
  
  void printNums(){
    for(var i=0;i<3;i++){
      List<int> newNumbers =new List.from(numbers); //what can i use for this?
      print(newNumbers[0]); //edit:i dont want [i], iwant to use ewNumbers[0] for new int for each time
    }
  }
  printNums();
// expected new int for each but same one
}

solution from a friend:

import 'dart:math';

int get ramdomint => Random().nextInt(100);

List<int> get numbers => [ramdomint, ramdomint, ramdomint];

void main() {
  for (var i = 0; i < 3; i++) {
    print(numbers[0]);
  }
}


回答1:


  1. Do not nest functions. Move ramdomint and printNums outside main function.
  2. Add an empty list of arguments to the main function.
  3. printNums: pass list of numbers as an argument.
  4. printNums: you don't need to copy the list to the newNumbers if you want only to display the content of the list.
  5. printNums: the problem is, you access only first element of the list (with 0 index).
import 'dart:math';

void main() {
  List<int> numbers = [ramdomint(), ramdomint(), ramdomint()];

  printNums(numbers);
}

int ramdomint() => Random().nextInt(100);

void printNums(List<int> numbers) {
  // Easier way:
  for (int item in numbers) {
    print(item);
  }

  // Your way:
  for (int i = 0; i < numbers.length; i++) {
    print(numbers[i]);
  }
}

EDIT:

According to @jamesdlin's comment, you can extend list class to randomize unique values in the list:

import 'dart:math';

void main() {
  var numbers = <int>[]..randomize();

  printNums(numbers);
}

void printNums(List<int> numbers) {
  // Easier way:
  for (int item in numbers) {
    print(item);
  }

  // Your way:
  for (int i = 0; i < numbers.length; i++) {
    print(numbers[i]);
  }
}

extension on List<int> {
  void randomize({
    int length = 3,
    int maxValue = 100,
  }) {
    final generator = Random();
    for (var i = 0; i < length; i++) {
      add(generator.nextInt(maxValue));
    }
  }
}



回答2:


The Problem here is that you are creating a list from the numbers list and accessing only the first element.

So it always prints the first element.

import 'dart:math';

void main() {
  int ramdomint(){
    
  final _random = new Random();
    int _num =  _random.nextInt(100);
    return _num;
  }
  
  List<int> numbers=[ramdomint(),ramdomint(),ramdomint()];
  
  void printNums(){
    for(var i=0;i<3;i++){
      print(numbers[i]);
    }
  }

  printNums();

}

Don't want newNumbers, because it is already in List.

and the usage of List.from() - Documentation

Hope that works!



来源:https://stackoverflow.com/questions/65683945/dart-access-function-from-list

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!