ui界面优化,event handler优化-新增任务池模式,歌词加载优化,新房间管理(可以自动连接) 本地音频搜索算法优化,

This commit is contained in:
Aynakeya
2022-12-25 01:27:56 -08:00
parent 9ec4057412
commit 1e18ca1ff2
32 changed files with 429 additions and 359 deletions

View File

@@ -5,18 +5,7 @@ import (
"strconv"
)
func SliceString(str string, from int, to int) (string, bool) {
sList := []rune(str)
if to <= 0 {
to = len(sList) + to
}
if from >= len(sList) || to > len(sList) {
return "", false
}
return string(sList[from:to]), true
}
func LenString(str string) int {
func StrLen(str string) int {
return len([]rune(str))
}
@@ -25,29 +14,106 @@ func StringNormalize(str string, min int, max int) string {
return fmt.Sprintf(fmtStr, str)
}
func StringSliceContains(s []string, e string) bool {
for _, a := range s {
if a == e {
return true
}
}
return false
}
func StringToInt(s string) int {
func Atoi(s string) int {
i, _ := strconv.Atoi(s)
return i
}
func StringSliceCopy(src []string) []string {
x := make([]string, len(src))
copy(x, src)
return x
}
func GetOrDefault(s string, def string) string {
if s == "" {
return def
}
return s
}
func LevenshteinDistance(s1 string, s2 string) int {
// support unicode
r1 := []rune(s1)
r2 := []rune(s2)
r1l := len(r1)
r2l := len(r2)
if r1l == 0 || r2l == 0 {
return Max(r1l, r2l)
}
previous := make([]int, r2l+1)
current := make([]int, r2l+1)
for i := 0; i <= r2l; i++ {
previous[i] = i
}
for i := 1; i <= r1l; i++ {
current[0] = i
for j := 1; j <= r2l; j++ {
subCost := 1
if r1[i-1] == r2[j-1] {
subCost = 0
}
// current[j] = min( insertCost,deleteCost, subCost)
current[j] = Min(current[j-1]+1, previous[j]+1, previous[j-1]+subCost)
}
current, previous = previous, current
}
return previous[r2l]
}
func WeightedLevenshteinDistance(s1 string, s2 string, ins, del, repl int) int {
// support unicode
r1 := []rune(s1)
r2 := []rune(s2)
r1l := len(r1)
r2l := len(r2)
if r1l == 0 || r2l == 0 {
return Max(r1l, r2l)
}
previous := make([]int, r2l+1)
current := make([]int, r2l+1)
for i := 0; i <= r2l; i++ {
previous[i] = i
}
for i := 1; i <= r1l; i++ {
current[0] = i
for j := 1; j <= r2l; j++ {
subCost := 1
if r1[i-1] == r2[j-1] {
subCost = 0
}
// current[j] = min( insertCost,deleteCost, subCost)
current[j] = Min(current[j-1]+1*ins, previous[j]+1*del, previous[j-1]+subCost*repl)
}
current, previous = previous, current
}
return previous[r2l]
}
func LongestCommonString(s1 string, s2 string) string {
// support unicode
r1 := []rune(s1)
r2 := []rune(s2)
r1l := len(r1)
r2l := len(r2)
if r1l == 0 || r2l == 0 {
return ""
}
previous := make([]int, r2l+1)
current := make([]int, r2l+1)
max := 0
maxIndex := 0
for i := 1; i <= r1l; i++ {
for j := 1; j <= r2l; j++ {
if r1[i-1] == r2[j-1] {
current[j] = previous[j-1] + 1
if current[j] > max {
max = current[j]
maxIndex = i
}
} else {
current[j] = 0
}
}
current, previous = previous, current
}
return string(r1[maxIndex-max : maxIndex])
}