mirror of
https://github.com/certimate-go/certimate.git
synced 2026-09-21 12:43:46 +08:00
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package maps
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
// 在字典中递归地替换指定的字符串的值。
|
|
// 注意该函数会修改原始的字典。
|
|
//
|
|
// 入参:
|
|
// - dict: 字典。
|
|
// - oldStr:需要替换的字符串。
|
|
// - newStr:替换后的字符串。
|
|
//
|
|
// 出参:
|
|
// - dict: 替换后的字典。
|
|
func DeepReplaceValue(dict map[string]any, oldStr, newStr string) map[string]any {
|
|
return deepReplaceMapValue(dict, oldStr, newStr).(map[string]any)
|
|
}
|
|
|
|
// 与 [DeepReplaceValue] 类似,但入参类型为 `any`。
|
|
func DeepReplaceValueUnsafe(dict any, oldStr, newStr string) any {
|
|
return deepReplaceMapValue(dict, oldStr, newStr)
|
|
}
|
|
|
|
func deepReplaceMapValue(data any, oldStr, newStr string) any {
|
|
switch v := data.(type) {
|
|
case map[string]any:
|
|
for k, va := range v {
|
|
v[k] = deepReplaceMapValue(va, oldStr, newStr)
|
|
}
|
|
case []any:
|
|
for i, va := range v {
|
|
v[i] = deepReplaceMapValue(va, oldStr, newStr)
|
|
}
|
|
case []string:
|
|
for i, vs := range v {
|
|
v[i] = deepReplaceMapValue(vs, oldStr, newStr).(string)
|
|
}
|
|
case string:
|
|
return strings.ReplaceAll(v, oldStr, newStr)
|
|
}
|
|
return data
|
|
}
|