统计字符串中的字符数,按出现次数排序输出字符。

huangapple go评论120阅读模式
英文:

Count characters in string, output chars sorted by occurance

问题

你可以使用Go语言来实现这个功能。下面是一个示例代码:

  1. package main
  2. import (
  3. "fmt"
  4. "sort"
  5. "strings"
  6. )
  7. func main() {
  8. data := `
  9. a
  10. bb
  11. ccc
  12. üüüü
  13. ddddd
  14. 😀😀😀😀😀😀
  15. dd
  16. `
  17. // 去除换行符和空格
  18. data = strings.ReplaceAll(data, "\n", "")
  19. data = strings.ReplaceAll(data, " ", "")
  20. // 统计字符出现的次数
  21. counts := make(map[rune]int)
  22. for _, char := range data {
  23. counts[char]++
  24. }
  25. // 将结果按照出现次数排序
  26. type charCount struct {
  27. char rune
  28. count int
  29. }
  30. var charCounts []charCount
  31. for char, count := range counts {
  32. charCounts = append(charCounts, charCount{char, count})
  33. }
  34. sort.Slice(charCounts, func(i, j int) bool {
  35. return charCounts[i].count > charCounts[j].count
  36. })
  37. // 打印结果
  38. for _, cc := range charCounts {
  39. fmt.Printf("%c %d\n", cc.char, cc.count)
  40. }
  41. }

运行这段代码,你将得到以下结果:

  1. d 7
  2. 😀 6
  3. ü 4
  4. c 3
  5. b 2
  6. a 1

这个结果按照字符出现的次数进行了排序。注意,由于Go语言中的字符串是UTF-8编码的,所以我们使用rune类型来表示字符。

英文:

I have a string and want to know how often each non-white-space character occurs.

The result should be sorted by count.

  1. data := `
  2. a
  3. bb
  4. ccc
  5. üüüü
  6. ddddd
  7. 😀😀😀😀😀😀
  8. dd
  9. `

The result should be:

  1. a 1
  2. b 2
  3. c 3
  4. ü 4
  5. 😀 6
  6. d 7

How can I implement this with golang?

答案1

得分: 2

  1. package main
  2. import (
  3. "fmt"
  4. "sort"
  5. "unicode"
  6. )
  7. func main() {
  8. data := `
  9. a
  10. bb
  11. ccc
  12. üüüü
  13. ddddd
  14. 😀😀😀😀😀😀
  15. dd
  16. `
  17. m := map[rune]int{}
  18. for _, char := range data {
  19. if unicode.IsSpace(char) {
  20. continue
  21. }
  22. m[char] += 1
  23. }
  24. chars := []rune{}
  25. for char := range m {
  26. chars = append(chars, char)
  27. }
  28. sort.Slice(chars, func(i, j int) bool {
  29. return m[chars[i]] < m[chars[j]]
  30. })
  31. for _, char := range chars {
  32. fmt.Printf("%c %d\n", char, m[char])
  33. }
  34. }
  1. package main
  2. import (
  3. "fmt"
  4. "sort"
  5. "unicode"
  6. )
  7. func main() {
  8. data := `
  9. a
  10. bb
  11. ccc
  12. &#252;&#252;&#252;&#252;
  13. ddddd
  14. &#128512;&#128512;&#128512;&#128512;&#128512;&#128512;
  15. dd
  16. `
  17. m := map[rune]int{}
  18. for _, char := range data {
  19. if unicode.IsSpace(char) {
  20. continue
  21. }
  22. m[char] += 1
  23. }
  24. chars := []rune{}
  25. for char := range m {
  26. chars = append(chars, char)
  27. }
  28. sort.Slice(chars, func(i, j int) bool {
  29. return m[chars[i]] < m[chars[j]]
  30. })
  31. for _, char := range chars {
  32. fmt.Printf("%c %d\n", char, m[char])
  33. }
  34. }

这是一个Go语言的程序,它统计给定字符串中每个字符出现的次数,并按照出现次数从小到大进行排序。程序首先定义了一个字符串变量data,其中包含了一些字符和HTML实体编码。然后,程序使用一个map来记录每个字符出现的次数。接下来,程序将map中的字符提取出来,并按照出现次数进行排序。最后,程序打印出每个字符及其出现次数。

注意:程序中的HTML实体编码会被正确地解析为对应的字符。

英文:
  1. package main
  2. import (
  3. &quot;fmt&quot;
  4. &quot;sort&quot;
  5. &quot;unicode&quot;
  6. )
  7. func main() {
  8. data := `
  9. a
  10. bb
  11. ccc
  12. &#252;&#252;&#252;&#252;
  13. ddddd
  14. &#128512;&#128512;&#128512;&#128512;&#128512;&#128512;
  15. dd
  16. `
  17. m := map[rune]int{}
  18. for _, char := range data {
  19. if unicode.IsSpace(char) {
  20. continue
  21. }
  22. m[char] += 1
  23. }
  24. chars := []rune{}
  25. for char := range m {
  26. chars = append(chars, char)
  27. }
  28. sort.Slice(chars, func(i, j int) bool {
  29. return m[chars[i]] &lt; m[chars[j]]
  30. })
  31. for _, char := range chars {
  32. fmt.Printf(&quot;%c %d\n&quot;, char, m[char])
  33. }
  34. }

huangapple
  • 本文由 发表于 2022年6月13日 13:33:04
  • 转载请务必保留本文链接:https://go.coder-hub.com/72598155.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定