#この記事について
完全に自分用に書いているので説明は少なめで簡単な処理のものが多いですが、備忘録的に使うので随時更新します。
##stringからのキャスト
###string
→ int
func atoi(a string) (b int) {
b, err := strconv.Atoi(a)
if err != nil {
panic(err)
}
return
}
###半角スペース区切りの string
→ []string
func aToSlice(a string) (b []string) {
b = strings.Fields(strings.TrimSpace(a))
return
}
###半角スペース区切りの string
→ []int
func aToIntSlice(a string) (b []int) {
c := strings.Fields(strings.TrimSpace(a))
for _, v := range c {
d := atoi(v)
b = append(b, d)
}
return
}
###半角スペース区切りの string
→ []float64
func aToFloat64Slice(a string) (b []float64) {
c := strings.Fields(strings.TrimSpace(a))
for _, v := range c {
d, _ := strconv.ParseFloat(v, 64)
b = append(b, d)
}
return
}
##スライスから別の型のスライスへのキャスト
###[]string
→ []int
func toIntSlice(a []string) (b []int) {
for _, s := range a {
i := atoi(s)
b = append(b, i)
}
return
}
###[]int
→ []string
func toStrSlice(a []int) (b []string) {
for _, i := range a {
s := strconv.Itoa(i)
b = append(b, s)
}
return
}
##その他
###絶対値を int
で返す
func abs(a int) (b int) {
b = int(math.Abs(float64(a)))
return
}
###map[int]int
からvalueの最大値を返す
func findMaxValue(m map[int]int) (maxValue int) {
var max int
var maxIndex int
for i, v := range m {
if max <= v {
max = v
maxIndex = i
}
}
maxValue = m[maxIndex]
return
}
###map[int]int
から最大値を持つkeyのみのスライスを返す
Goの連想配列(map)は、範囲ループを使うと順番が実行ごとに異なるので昇順でソート返す。
func findMaxValueKeys(m map[int]int) (maxKeys []int) {
maxValue := findMaxValue(m)
for i, v := range m {
if v == maxValue {
maxKeys = append(maxKeys, i)
}
}
sort.Slice(maxKeys, func (i, j int) bool { return maxKeys[i] < maxKeys[j] })
return
}
アルファベットを順番に出力
for i := 0; i < 26; i++ {
fmt.Print(string('a'+i))
}
文字列を逆順にする
func reverseString(s string) (rs string) {
for i := len(s); i > 0; i-- {
rs += s[i-1 : i]
}
return
}
数字を3桁ずつカンマ区切りにする (int
→ string
)
ループ1回でできそうだけど
func decorateNum(num int) (decoratedNum string) {
strNum := strconv.Itoa(num)
revStrNum = reverseString(strNum)
var revDecoratedNum string
for i := 0; i < len(strNum); i++ {
revDecoratedNum += revStrNum[i : i+1]
if (i+1)%3 == 0 && i+1 < len(strNum) {
revDecoratedNum += ","
}
}
for i := len(revDecoratedNum); i > 0; i-- {
decoratedNum += revDecoratedNum[i-1 : i]
}
return
}
ひらがなを半角カタカナに変換
いい感じのパッケージを見つけられなかった
func hiraganaToSingle(hiraganaInput string) (singleOutput string) {
hiragana := "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんぁぃぅぇぉっゃゅょゔがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ"
single := "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョウカキクケコサシスセソタチツテトハヒフヘホハヒフヘホ"
for i := 0; i < len([]rune(hiraganaInput)); i++ {
for j := 0; j < len([]rune(hiragana)); j++ {
if string([]rune(hiraganaInput)[i:i+1]) == string([]rune(hiragana)[j:j+1]) {
singleOutput += string([]rune(single)[j : j+1])
if j > 54 && j < 76 {
singleOutput += "゙"
} else if j >= 76 {
singleOutput += "゚"
}
}
}
}
return
}