You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart统计字符串单词出现次数代码返回空,问题出在哪?

Dart代码统计单词出现次数返回空字典的问题分析

你编写的Dart代码想要统计字符串中单词的出现次数,但运行后返回空字典{},问题出在以下几个地方:

问题代码

void main (){
  print(occurence("hello hi hello one two two three"));
}

occurence(text){
  var words = text.split(" ");
  print(words);
  var count = {};
  words.map((element) => {
    if (count[element]){
      count[element]+=1
    }else{
     count[element] =1
      }
  });
  return count;
}

问题点解析

  • map方法未触发执行:Dart的map是惰性迭代器,它不会主动遍历元素,只有调用toList()、forEach()这类方法时才会执行回调逻辑。你只调用了map但没处理返回值,导致计数逻辑完全没运行。
  • 键存在判断错误:当count中没有对应元素时,count[element]返回null,直接用if (count[element])会触发类型错误,因为null不能作为布尔值判断。
  • 箭头函数代码块被误解析:=> { ... }的写法会被Dart解析为创建新的Map字面量,而非执行代码块,导致计数逻辑无法正确执行。

修正后的代码

void main (){
  print(occurence("hello hi hello one two two three"));
}

occurence(text){
  var words = text.split(" ");
  var count = {};
  // 改用forEach主动遍历执行计数逻辑
  words.forEach((element) {
    // 用containsKey判断键是否存在,避免null错误
    if (count.containsKey(element)){
      count[element] += 1;
    } else {
      count[element] = 1;
    }
  });
  return count;
}

修正说明

  1. 替换map为forEach:forEach是专门用于遍历并执行副作用的方法,会直接遍历所有单词并执行计数逻辑。
  2. 改用containsKey判断:准确检查字典中是否存在目标单词,避免null导致的运行错误。
  3. 使用普通代码块:去掉箭头函数,用forEach((element) { ... })的写法,确保代码块内的逻辑正确执行。

运行修正后的代码就能得到你期望的输出:{hello: 2, hi: 1, one: 1, two: 2, three: 1}

内容的提问来源于stack exchange,提问作者Ayz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:31:49