go - 按给定切片对切片字符串进行排序/排序
问题描述
如何按照另一个字符串切片给出的顺序对字符串切片进行排序。如果输入切片中不存在该字符串,则忽略它。
animalsInput := []string{"cat", "bird", "zebra", "fox"}
animalsOrder := []string{"bird", "lion", "fox"}
//desired output
//{"bird", "fox", "cat", "zebra"}
解决方案
实现这一点的一种方法是编写rank
基于顺序数组的映射
rank:=map[string]int{}
for i, x:=range animalsOrder {
rank[x]=i
}
然后rank
使用sort
:
sort.Slice(animalsInput,func(i,j int) bool {
irank, ok:=rank[animalsInput[i]]
if !ok {
irank=len(animalsInput)
}
jrank, ok:=rank[animalsInput[j]]
if !ok {
jrank=len(animalsInput)
}
return irank<jrank
})
推荐阅读
- azure - Azure Express 路由强制隧道与 NVA
- docker - Docker swarm、elasticsearch、单服务集群——3个节点——无法确定master-eligible节点
- amazon-web-services - AWS OpenSearch 的 Apache Beam Java ElasticsearchIO 错误
- c# - C# .net core - 对内存缓存的依赖注入引用
- amazon-web-services - 将现有 AWS 机密引入 Cloud Formation 堆栈
- highcharts - Highcharts - SMA 指标不显示
- reactjs - React Konva 旋转/旋转动画
- c - 具有中断选项的功能的顺序执行
- typescript - 打字稿。定义函数对象的类型
- ruby - 无法使用没有 rails 的 mysql2 构建 gem 原生扩展