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

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

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

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

Q&A

1回答

1958閲覧

[大至急]rangeの変数を別のfor文rangeで使いたい

退会済みユーザー

退会済みユーザー

総合スコア0

Go

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

0グッド

0クリップ

投稿2016/11/21 11:52

編集2016/11/22 07:13

###前提・実現したいこと
DBから取得しlistを回しているループとは別のfor文でlistfor文で使っていた変数を使いたいです。

###発生している問題
forで使った変数をメソッドとして、別のfor文でも使いたいと考えているのですが、力量足りず困っています。

ネストせず、回したいのでfor文が二つになるか、また別の方法があれば教えていただきたいです。

struct

1type Students struct{ 2Id int64 3Name string 4Subject string 5Point int 6Class string 7}

struct2

1type Teacher struct{ 2Id int64 3Name string 4Class string 5}

go

1var sentence string 2collect := map[string]string{} 3for _, test := range list { 4 sentence := fmt.Sprintf("\n\n"+ 5 "名前: %s\n"+ 6 "教科: %s\n"+ 7 "点数: %s\n\n", 8 test.Name, test.Title, test.Score, 9 ) 10 collect[test.Name] += sentence 11} 12for _, v := range collect{ 13 sentence = v 14 fmt.Println("---------------------") 15 fmt.Print(sentence) 16 17//こんな感じの結果なので-------------------- 18//名前:高橋 19//教科:国語 20//点数:79 21 22//名前:高橋 23//教科:算数 24//点数:98 25 26//名前:高橋 27//教科:英語 28//点数:58 29//------------------------------ 30} 31 32 33 34for _, alert := teacher{ 35//ここでtestfor文の変数testを使いたいです。 36//test.Titleとtest.Scoreを使いたいと考えているので、 37//test変数をここでも使いたいと考えています。 38//ネストにすると、上記のような結果が崩れてしまうので、 39//できればの結果を残しつつ、 40//ここのfor文でtest.Titleとtest.Scoreを使いたいです。 41}

お力添えくださいお願いします...

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

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

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

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

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

akio221

2016/11/22 02:49

やりたいことがよく見えません。テストのループで、テスト結果(の何)と生徒(の何?)と教師(の何?)がマッチしたら、アラートしたい条件になるのですか?
退会済みユーザー

退会済みユーザー

2016/11/22 02:59

追記しました
guest

回答1

0

教師の名前で(教師アラート用配列を)連想配列化し、
アラートに該当したとき、そこに入れておき、
最後に、その教師アラート用配列からまとめて通知する、
というのではいかがですか。

投稿2016/11/22 03:02

akio221

総合スコア716

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

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

akio221

2016/11/22 06:02

そのまま使えるわけではないですが、おおよそ、こんなソースになるんじゃないかと。 ※ノーデバッグです。 //TestInfoはlistで扱っている定義済みのもののつもりで。 alertTestAllMap := make(map[string][]TestInfo) //教師の数だけループ for _, alert := teacher{ //テストの数だけループ for _, test := range list { //例えば同じクラスで50点に満たない場合 if test.Class == alert.Class && test.Score < 50 { //マップに教師.名前があるか? alertMap, ok := alertTestAllMap[alert.Name] if ok { //あったので追加 alertMap = append(alertMap, test) } else { //なかったので新しく作成して追加 s := make([]TestInfo, 1) s = append(s, test) alertTestAllMap[alert.Name] = s } } } } //マップに、名前ごとに足した配列から値を出す。 for key, value := range alertTestAllMap { //取れたキーは教師.名前 fmt.Println(key); for _, test := range value { //テストの結果なのでセンテンスを作成する。 } } 教師ごとにマップを作成し、アラートに引っかかるテストをためるイメージです。 Goは私も勉強中なのでやや記述が怪しいです。ごめんなさい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問