这是问题的总结:
我试图从来自解码的 .json 文件(包含字符串“name”和整数“age”)的结构中找到最常见的“age”。
之后我需要根据“年龄”的最大出现频率打印“姓名”。
根据“年龄”的最大出现次数打印的“姓名”需要按字母顺序排序
输入(.json):
[
{"name": "John","age": 15},
{"name": "Peter","age": 12},
{"name": "Roger","age": 12},
{"name": "Anne","age": 44},
{"name": "Marry","age": 15},
{"name": "Nancy","age": 15}
]
输出:['John', 'Mary', 'Nancy']。
解释:因为数据中出现次数最多的年龄是 15 岁(出现 3 次),所以输出应该是一个包含三个人姓名的字符串数组,在这种情况下应该是 ['John', 'Mary', 'Nancy' ].
例外 :
如果有多个“年龄”具有相同的最大出现次数,我需要拆分数据并将它们打印到不同的数组中(即当“Anne”年龄为 12 岁时,结果为:['John', 'Mary ', '南希'], ['安妮', '彼得', '罗杰']
这是我尝试过的(在 Golang 中):
package main
{
import (
"encoding/json"
"fmt"
"os"
"sort"
)
// 1. preparing the empty struct for .json
type Passanger struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
// 2. load the json file
content, err := os.ReadFile("passanger.json")
if err != nil {
fmt.Println(err.Error())
}
// 3. parse json file to slice
var passangers []Passanger
err2 := json.Unmarshal(content, &passangers)
if err2 != nil {
fmt.Println("Error JSON Unmarshalling")
fmt.Println(err2.Error())
}
// 4. find most frequent age numbers (?)
for _, v := range passangers {
// this code only show the Age on every line
fmt.Println(v.Age)
}
// 5. print the name and sort them apabethically (?)
// use sort.slice package
// implement group based by "max-occurence-age"
}
从昨天开始就卡住了,我还尝试从许多编码挑战问题中实施解决方案,例如:
func majorityElement(arr int) int {
sort.Ints(arr)
return arr[len(arr)/2]
}
但我仍在努力理解如何将 Passanger 切片中的“年龄”值作为整数输入 (arr int) 处理到上面的代码中。
我在网上找到的其他解决方案是通过迭代 map[int]int 来找到最大频率:
func main(){
arr := []int{90, 70, 30, 30, 10, 80, 40, 50, 40, 30}
freq := make(map[int]int)
for _ , num := range arr {
freq[num] = freq[num]+1
}
fmt.Println("Frequency of the Array is : ", freq)
}
但话又说回来,.json 文件不仅包含整数(年龄),还包含字符串(名称)格式,我仍然不知道如何分别处理“名称”和“年龄”..
我真的需要一个适当的指导。
*** 这是我上面提到的源代码 (main.go) 和 (.json) 文件: https: //github.com/ariejanuarb/golang-json
白衣非少年
冉冉说
相关分类