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

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

Count characters in string, output chars sorted by occurance

问题

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

package main

import (
	"fmt"
	"sort"
	"strings"
)

func main() {
	data := `
	a
	bb
	ccc
	üüüü
	ddddd
	😀😀😀😀😀😀
    dd
	`

	// 去除换行符和空格
	data = strings.ReplaceAll(data, "\n", "")
	data = strings.ReplaceAll(data, " ", "")

	// 统计字符出现的次数
	counts := make(map[rune]int)
	for _, char := range data {
		counts[char]++
	}

	// 将结果按照出现次数排序
	type charCount struct {
		char  rune
		count int
	}
	var charCounts []charCount
	for char, count := range counts {
		charCounts = append(charCounts, charCount{char, count})
	}
	sort.Slice(charCounts, func(i, j int) bool {
		return charCounts[i].count > charCounts[j].count
	})

	// 打印结果
	for _, cc := range charCounts {
		fmt.Printf("%c %d\n", cc.char, cc.count)
	}
}

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

d 7
😀 6
ü 4
c 3
b 2
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.

	data := `
	a
	bb
	ccc
	üüüü
	ddddd
	😀😀😀😀😀😀
    dd
	`

The result should be:

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

How can I implement this with golang?

答案1

得分: 2

package main

import (
	"fmt"
	"sort"
	"unicode"
)

func main() {
	data := `
	a
	bb
	ccc
	üüüü
	ddddd
	😀😀😀😀😀😀
    dd
	`
	m := map[rune]int{}
	for _, char := range data {
		if unicode.IsSpace(char) {
			continue
		}
		m[char] += 1
	}
	chars := []rune{}
	for char := range m {
		chars = append(chars, char)
	}
	sort.Slice(chars, func(i, j int) bool {
		return m[chars[i]] < m[chars[j]]
	})
	for _, char := range chars {
		fmt.Printf("%c %d\n", char, m[char])
	}
}
package main

import (
	"fmt"
	"sort"
	"unicode"
)

func main() {
	data := `
	a
	bb
	ccc
	&#252;&#252;&#252;&#252;
	ddddd
	&#128512;&#128512;&#128512;&#128512;&#128512;&#128512;
    dd
	`
	m := map[rune]int{}
	for _, char := range data {
		if unicode.IsSpace(char) {
			continue
		}
		m[char] += 1
	}
	chars := []rune{}
	for char := range m {
		chars = append(chars, char)
	}
	sort.Slice(chars, func(i, j int) bool {
		return m[chars[i]] < m[chars[j]]
	})
	for _, char := range chars {
		fmt.Printf("%c %d\n", char, m[char])
	}
}

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

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

英文:
package main

import (
	&quot;fmt&quot;
	&quot;sort&quot;
	&quot;unicode&quot;
)

func main() {
	data := `
	a
	bb
	ccc
	&#252;&#252;&#252;&#252;
	ddddd
	&#128512;&#128512;&#128512;&#128512;&#128512;&#128512;
    dd
	`
	m := map[rune]int{}
	for _, char := range data {
		if unicode.IsSpace(char) {
			continue
		}
		m[char] += 1
	}
	chars := []rune{}
	for char := range m {
		chars = append(chars, char)
	}
	sort.Slice(chars, func(i, j int) bool {
		return m[chars[i]] &lt; m[chars[j]]
	})
	for _, char := range chars {
		fmt.Printf(&quot;%c %d\n&quot;, char, m[char])
	}
}

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:

确定