英文:
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
üüüü
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])
}
}
这是一个Go语言的程序,它统计给定字符串中每个字符出现的次数,并按照出现次数从小到大进行排序。程序首先定义了一个字符串变量data,其中包含了一些字符和HTML实体编码。然后,程序使用一个map来记录每个字符出现的次数。接下来,程序将map中的字符提取出来,并按照出现次数进行排序。最后,程序打印出每个字符及其出现次数。
注意:程序中的HTML实体编码会被正确地解析为对应的字符。
英文:
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])
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论