Dart 列表中连续数字的平均长度<;int>;

Dart 列表中连续数字的平均长度<;int>;,dart,Dart,给定一个列表,其中数字总是从最高值到最低值递减,并且总是高于0 List number=[29,22,21,20,17,16,15,10,9,8,3,2,1] 最终目标是将连续的数字分组,然后查看每组的平均长度。 在这个例子中,因为我看到了分组,(29),(24,23,22),(17,16,15),(10,9,8),(3,2,1),所以我希望看到 List groupednumberlength=[1,3,3,3] final double average = groupedNumberLeng

给定一个
列表
,其中数字总是从最高值到最低值递减,并且总是高于0

List number=[29,22,21,20,17,16,15,10,9,8,3,2,1]

最终目标是将连续的数字分组,然后查看每组的平均长度。 在这个例子中,因为我看到了分组,(29),(24,23,22),(17,16,15),(10,9,8),(3,2,1),所以我希望看到

List groupednumberlength=[1,3,3,3]

final double average = groupedNumberLengths.reduce((int a, int b) => a + b) / numbers.length; //2.6
return average.round() // 3

我最初是在列表中循环,并确定下一个数字是否超过了
1
,但在循环中我有点不知所措,我想知道是否有人有更好的主意?

编辑:代码中的小错误,对不起

试试这个:

int avgLen(List<int> lst) {
  final repCntLst = List<int>();
  int repCnt = 1;
  lst.reduce((prev, curr) {
    if (prev - curr == 1) {
      ++repCnt;
    } else {
      repCntLst.add(repCnt);
      repCnt = 1;
    }
    return curr;
  });
  repCntLst.add(repCnt);
  final double average =
      repCntLst.reduce((int a, int b) => a + b) / repCntLst.length; //2.6
  return average.round(); // 3
}

void main() {
  final List<int> numbers = [29, 22, 21, 20, 17, 16, 15, 10, 9, 8, 3, 2, 1];
  print(avgLen(numbers));
}
int avgLen(列表lst){
final repCntLst=List();
int repCnt=1;
第一次减少((上一次,当前){
如果(上一次-当前==1){
++报告;
}否则{
repCntLst.add(repCnt);
repCnt=1;
}
返回货币;
});
repCntLst.add(repCnt);
最终双倍平均数=
repCntLst.reduce((int a,int b)=>a+b)/repCntLst.length;//2.6
返回average.round();//3
}
void main(){
最终列表编号=[29,22,21,20,17,16,15,10,9,8,3,2,1];
打印(avgLen(数字));
}

如果您考虑到问题,您可以通过以下方法减少问题:

void main() {
  final List<int> numbers = [29, 22, 21, 20, 17, 16, 15, 10, 9, 8, 3, 2, 1];
  print(avgLen(numbers)); // 3
}

int avgLen(List<int> numbers) {
  var groups = 1;

  for (var i = 1; i < numbers.length; i++) {
    if (numbers[i - 1] - numbers[i] != 1) {
      groups++;
    }
  }

  return (numbers.length / groups).round();
}
void main(){
最终列表编号=[29,22,21,20,17,16,15,10,9,8,3,2,1];
打印(avgLen(数字));//3
}
内特阿夫格伦(列表编号){
var组=1;
对于(变量i=1;i

所有组的总和始终为列表中的条目数。所以我们不需要计算这些。所以我们只需要知道有多少组。

Oo!一开始我忘了用reduce。谢谢@DanMossa如果能解决您的问题,请接受答案,谢谢。