首页 > 解决方案 > 按给定切片对切片字符串进行排序/排序

问题描述

如何按照另一个字符串切片给出的顺序对字符串切片进行排序。如果输入切片中不存在该字符串,则忽略它。

animalsInput := []string{"cat", "bird", "zebra", "fox"}
animalsOrder := []string{"bird", "lion", "fox"}

//desired output
//{"bird", "fox", "cat", "zebra"}

标签: go

解决方案


实现这一点的一种方法是编写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
})

推荐阅读