Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 省道-查找字符串中最常用的字符_Dart - Fatal编程技术网

Dart 省道-查找字符串中最常用的字符

Dart 省道-查找字符串中最常用的字符,dart,Dart,我被这个常见的面试问题困住了。我需要返回给定字符串中最常用的字符。我正在尝试创建一个地图,第一步是每个角色的计数 这是我目前的进展: main(List<String> arguments) { maxChar('hello'); } void maxChar(String word) { Map<String, int> charMap = {}; int max = 0; String maxChar = ''; word.split('').f

我被这个常见的面试问题困住了。我需要返回给定字符串中最常用的字符。我正在尝试创建一个地图,第一步是每个角色的计数

这是我目前的进展:

main(List<String> arguments) {
  maxChar('hello');
}

void maxChar(String word) {
  Map<String, int> charMap = {};
  int max = 0;
  String maxChar = '';
  word.split('').forEach((char) {
    if(charMap.containsValue(char)) {
      charMap[char]+1;
      return;
    } else {
      charMap[char] = 1;
    }
  });
  print(charMap);
}
我做错了什么?有没有更简单的方法可以在Dart中返回字符串中最常见的字符

谢谢

编辑:

好的,我已经解决了,但肯定有一种更简洁的方法来解决这个问题。请参见下面我的解决方案:

main(List<String> arguments) {
  print(max_char.maxChar('hello'));
}

String maxChar(String word) {
  Map<String, int> charMap = {};
  int max = -1;
  String maxChar = '';
  word.split('').forEach((char) {
    if(charMap.containsKey(char)) {
      charMap[char]++;
      return;
    } else {
      charMap[char] = 1;
    }
  });
  charMap.forEach((k,v) {
    if(v > max) {
      max = v;
      maxChar = k;
    }
  });
  return maxChar;
}
main(列出参数){
打印(max_char.maxChar('hello'));
}
字符串maxChar(字符串字){
Map charMap={};
int max=-1;
字符串maxChar='';
word.split(“”).forEach((字符){
if(charMap.containsKey(char)){
charMap[char]++;
返回;
}否则{
charMap[char]=1;
}
});
charMap.forEach((k,v){
如果(v>最大值){
最大值=v;
maxChar=k;
}
});
返回maxChar;
}

一种更短的字符计数方法绝对是可行的:

String charCount(String chars) {
  int maxChar = -1;
  int maxCount = 0;
  var counts = <int, int>{};
  for (var char in chars.runes) {
    int count = counts.update(char, (n) => n + 1, ifAbsent: () => 1);
    if (count > maxCount) {
      maxCount = count;
      maxChar = char;
    }
  }
  return String.fromCharCode(maxChar);
}
String charCount(字符串字符){
int maxChar=-1;
int maxCount=0;
变量计数={};
for(chars.runes中的var char){
int count=counts.update(字符,(n)=>n+1,如果存在:()=>1);
如果(计数>最大计数){
最大计数=计数;
maxChar=char;
}
}
返回字符串.fromCharCode(maxChar);
}
如果只想对字符进行计数,则可以删除提及
maxCount
maxChar
的所有行


我使用整数来表示字符,而不是字符串。这更便宜,也同样精确,并且允许您识别和组合Unicode UTF-16代理。

一种更短的字符计数方法肯定是可行的:

String charCount(String chars) {
  int maxChar = -1;
  int maxCount = 0;
  var counts = <int, int>{};
  for (var char in chars.runes) {
    int count = counts.update(char, (n) => n + 1, ifAbsent: () => 1);
    if (count > maxCount) {
      maxCount = count;
      maxChar = char;
    }
  }
  return String.fromCharCode(maxChar);
}
String charCount(字符串字符){
int maxChar=-1;
int maxCount=0;
变量计数={};
for(chars.runes中的var char){
int count=counts.update(字符,(n)=>n+1,如果存在:()=>1);
如果(计数>最大计数){
最大计数=计数;
maxChar=char;
}
}
返回字符串.fromCharCode(maxChar);
}
如果只想对字符进行计数,则可以删除提及
maxCount
maxChar
的所有行


我使用整数来表示字符,而不是字符串。这更便宜,也同样精确,并且允许您识别和组合Unicode UTF-16代理。

您正在计算charMap[char]+1,但您没有对结果做任何处理(即,将其存储在地图中)。我怎么做?从未使用Dart,但我猜
charMap[char]=charMap[char]+1
charMap[char]+=1
实际上charMap[char]+1是有效的,问题是我使用的是containsValue而不是containsKey。您还可以在第一个forEach循环中使用空感知运算符:
charMap[char]??=0;charMap[char]++您正在计算charMap[char]+1,但您没有对结果做任何操作(即将其存储在地图中)。我该怎么做?从未使用Dart,但我猜
charMap[char]=charMap[char]+1
charMap[char]+=1
实际上charMap[char]+1是有效的,问题是我使用的是containsValue而不是containsKey。您还可以在第一个forEach循环中使用空感知运算符:
charMap[char]??=0;charMap[char]++