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

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

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

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

Q&A

解決済

2回答

1140閲覧

共通の値があったらまとめてlistにしたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Go

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

0グッド

0クリップ

投稿2016/11/18 03:14

###前提・実現したいこと
DBから取ってきた値に共通する値があったら、それぞれまとめて、出力したい。

Dbから取得してきた、名前と教科と点数があり、それを名前ごとにまとめてlistとして表示したい。
現状どうやって表示したらいいかわかっていません...

ご教授いただけたら幸いです。

###該当のソースコード

Go

1for _, test := range list { 2 sentence := fmt.Sprintf("\n\n"+ 3 "名前: %s\n"+ 4 "教科: %s\n"+ 5 "点数: %s\n\n", 6 test.Name., test.Title, 7 ) 8log.Println(sentence) 9 }

出力としては以下のような感じで出力したいと考えています。

名前:高橋 教科:国語 点数:79 名前:高橋 教科:算数 点数:98 名前:高橋 教科:英語 点数:58 ------------------------------ 名前:斎藤 教科:国語 点数:100 名前:高橋 教科:算数 点数:58

現状

名前:高橋 教科:国語 点数:79 名前:斎藤 教科:国語 点数:100 名前:鈴木 教科:国語 点数:69

のように普通に取れた値順で取れてしまっています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

連想配列を使うといいでしょう

go

1collect := map[string]string{} 2for _, test := range list { 3 sentence := fmt.Sprintf("\n\n"+ 4 "名前: %s\n"+ 5 "教科: %s\n"+ 6 "点数: %s\n\n", 7 test.Name, test.Title, test.Score, 8 ) 9 collect[test.Name] += sentence 10} 11for _, v := range collect{ 12 fmt.Println("---------------------") 13 fmt.Print(v) 14}

名前をキーにして文字列を加算していくか、データ型の配列をappendを使ってデータを追加していく方法が良いかと思います。

投稿2016/11/19 06:49

intelf___

総合スコア868

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

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

退会済みユーザー

退会済みユーザー

2016/11/21 11:37

できました! ありがとうございます!
guest

0

まず、もっとも簡単なのは、

Dbから取得してきた、名前と教科と点数があり、

この時点の取得SQLで、「Order By 名前,教科」とすることです。

どうしても、取ってきたリストの中身で勝負したいのであれば、
・取ってきたリストでループ
1)マップ型に名前があれば、その名前でリストをマップから取得
なければ、マップに新たな名前を追加し、新しいリストを作成
2)手順1)で得られたリストにループ中のリスト要素を追加

とすれば、ループが終わった時点ではマップに、名前ごとのリストが作成されています。

投稿2016/11/18 05:16

akio221

総合スコア716

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

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

退会済みユーザー

退会済みユーザー

2016/11/18 08:32

ありがとうございます。 私自身の理解が進んでおらず、よくわかっていません。 できましたら、もう少しクリアに書いていただけないでしょうか。 すみません。
akio221

2016/11/18 08:49

大雑把には、SQLでソートするか、自分で名前を見ながらソートするか、と回答しました。 SQLでやるのであれば、発行するSQLの最後にorder byを入れてみてはいかがですか。 自分でソートする方法のであれば、名前別にMAP型にスライスを入れ、 そこに追加していけば、どうですか。
akio221

2016/11/18 09:39

あと、はじめの回答からもれたのですが、DBからの結果が配列に入っているのであれば、 Sortパッケージを入れてソートを実装するのもありです。
退会済みユーザー

退会済みユーザー

2016/11/21 11:37

できました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問