Ограничение до 1 только в том случае, если возвращать несколько при прерывании оператора if

#arrays #flutter #dart

#массивы #flutter #dart

Вопрос:

Допустим, у меня есть список массивов, как указано

 Array listarray = ['1','2','3','3','3','4','5','6','6','7','8']

for (int i = 0; i<listarray.length; i  ){
 if(listarray[i] == '3'){
   return 'this is three';
 }else if (listarray[i] == '6'){
   return 'this is six';
 }
}
  

он вернется как

 this is threethis is threethis is threethis is sixthis is six
  

Я хотел бы знать, есть ли у меня способ вернуть только первый или, может быть, ограничить его только 1 возвратом?

так что это будет что-то вроде

 this id threethis is six
  

Ответ №1:

Прежде всего: в dart нет типа Array, хотя есть List.

Вы можете удалить дубликаты, преобразовав list в set:

 var listarray = ['1','2','3','3','3','4','5','6','6','7','8'];
listarray = listarray.toSet().toList();
  

Ответ №2:

Поскольку другие ответы дали правильный подход к использованию sets . Мой подход немного отличается, учитывая вышеуказанные условия, то есть для поиска минимально возможных элементов

Для этого мой алгоритм:

 1. take two bools, which will keep a track on the items, in this case, for element 6 and 3
2. If conditions check for the item == the element and if the bool is false
3. If satisfies, make the bool return true, and print the item
  

Пожалуйста, обратите внимание: я использую print , вы можете использовать свой return , вместо print в коде

 void main() {
  bool _threeFound = false;
  bool _sixFound = false;
  
  List<String> listarray = ['1','2','3','3','3','4','5','6','6','7','8'];
  
  for(var item in listarray){
    // it won't come unless satisfies the condition
    // and it will come only once
    if(item == '3' amp;amp; _threeFound == false){
      _threeFound = true;
      print('this is three');
    }else if(item == '6' amp;amp; _sixFound == false){
      _sixFound = true;
      print('this is six');
    }
  }
}
  

Вывод

 this is three
this is six
  

Ответ №3:

Вы можете попробовать это:

 import 'dart:collection';

void main() {
  var arr = ['1','2','3','3','3','4','5','6','6','7','8'];
  
  //make values unique
  var uniqueValues = LinkedHashSet.from(arr);
  
  //transform input values to output values
  var mappedValues = uniqueValues.map((item){
    if(item == '3'){
      return 'this is three';
    } else if (item == '6'){
      return 'this is six';
    }
  }).toList();
  
  //remove null value from output
  mappedValues.removeWhere((value) => value == null);
    
  print(mappedValues);
  
}