前提・実現したいこと
ニフクラというサービスを使って、データを保存しています。
データベースに保存されている値を使って棒グラフを作っていますが、
一回棒グラフを作るのに何回もリクエストを送る方法を使っています。
明らかに無駄なリクエストをしていると感じているのですが、どう改善すれば効率が良いかわかりません。
ご教授をお願いします
発生している問題・エラーメッセージ
無駄なリクエストをしている気がするが、改善方法がわかりません
該当のソースコード
unity
1 NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject>("data"); 2 3 for (int i = 0; i < 9; i++) 4 { 5 query.WhereGreaterThanOrEqualTo("s", 300 + i * 8); 6 query.WhereLessThan("s", 308f + i * 8); 7 query.CountAsync((int count, NCMBException e) => { 8 if (e != null) 9 { 10 bartext.text = "bar_error"; 11 } 12 else 13 { 14 //件数を出力 15 Debug.Log("件数 : " + count); 16 valueList.Add(count); 17 } 18 }); 19 }
"data"という名前のテーブルにある"s"には300~400ぐらいの値が入っています。
その値の範囲を8ずつで区切って、その範囲内の個数をvalueListというリストに追加しています
下のように描画します。
このプログラムだと同じテーブルを9回も見ていることになっている気がして、もっと効率よくできる気がしています
試したこと
データ件数取得をみてデータの範囲を指定して個数をとるプログラムを書きました。
いま考えているのは下のプログラムです
unity
1 var a = 0; 2 query1.OrderByAscending("s"); 3 query1.FindAsync((List<NCMBObject> objList, NCMBException e) => 4 { 5 if (e != null) 6 { 7 Infromation_NCMb.text = "error"; 8 } 9 else 10 { 11 for (int t = 0; t < 9; t++) 12 { 13 //ここにfor文などで範囲を指定してvalueListに追加するのがよいのか? 14 for (int i = 0; i < objList.Count; i++) 15 { 16 if ( float(objList[i]["s"]) < 308 + (t * 8)) 17 { 18 a = a + 1; 19 } 20 } 21 valueList.Add(a); 22 } 23 } 24 });
これだとif ( float(objList[i]["s"]) < 308 + (t * 8))の部分でエラーがでて、objectをfloatにできないというエラーが発生します。
またfor文が2つになり、処理が遅くなるような気がしています
もっと良い方法はありますか?
補足情報(FW/ツールのバージョンなど)
unity 2018
windows10
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。