質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

807閲覧

go slice操作

y.ssss

総合スコア27

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2020/04/26 00:55

編集2020/04/26 01:10
func main() { slice := []string{"0aaaa", "2cccc", "1bbbbb", "5eeeee", "4ddddd"} var n int for _, v := range slice { t := strconv.Itoa(n) if string(v[0]) == t { fmt.Println(string(v[1:])) n += 1 } else { slice = append(slice, v) } } }

上記のようなコードで文字列の先頭の番号を元にaaa,bbb,ccc,ddd,eeeのように表示させたくて
for文の中で再度appendすればいけるかと思ったのですが、ダメでした。。
このような場合、どのようにすれば何度もsliceを回すことが出来ますか?
または、ほかの方法で同様の表示が出来るとしたらどのような方法がありますか?

基礎構文の初歩的な部分で申し訳ありませんが、ご教授していただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

単に文字列の先頭文字列でソートしたいだけであれば以下のような例が...(この実装は1文字目だけ数字、と決め打ちしているので "999xxxxx" みたいな文字列には対応できません。

もう少しちゃんときちんと実装するとすれば、数値と文字列を持つ構造体のスライスを作っておいて、それぞれの slice 文字列から split して構造体に格納。構造体のスライスに append して、最後に slice の数値でソートする、といった方法が考えられます。

go

1package main 2 3import ( 4 "fmt" 5 "strconv" 6) 7 8func main() { 9 10 slice := []string{"0aaaa", "2cccc", "1bbbbb", "5eeeee", "4ddddd"} 11 12 tmp := make([]string, 10) 13 for _, v := range slice { 14 t, err := strconv.Atoi(string([]rune(v)[0])) 15 if err != nil { 16 panic(err) 17 } 18 tmp[t] = string([]rune(v)[1:]) 19 } 20 21 for _, v := range tmp { 22 if v == "" { 23 continue 24 } 25 fmt.Println(v) 26 } 27}
  • 出力結果
aaaa bbbbb cccc ddddd eeeee

投稿2020/04/26 01:16

d_tutuz

総合スコア730

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y.ssss

2020/04/26 04:34

実際のソースまで載せていただき、とても参考になりました。! こちらと、ご教授いただいた内容を元に書いてみたら無事解決いたしました。 細かいところまでありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問