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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

button

HTMLで用いる<button>タグです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1859閲覧

次の条件のもとで数字を重複しないで取得したいです。

KS-_-SK

総合スコア39

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

button

HTMLで用いる<button>タグです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

3クリップ

投稿2020/05/21 13:04

編集2020/05/21 13:27

###実行環境
・Window10Home
・Unity2018.4.13f1

実現させたいこと

以下にある条件のもと、値を重複せずに取得したいです。
###該当のプログラム

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using System.IO; 6using System.Linq; 7using System; 8 9public class TextToButton : MonoBehaviour 10{ 11 //public Button button; 12 public int i_n_t; 13 public string st; 14 public GameObject button; 15 public GameObject Can; 16 17 // Start is called before the first frame update 18 void Start() 19 { 20 st = File.ReadAllText(@"C:\TEST\one.txt"); 21 for(int i = 0; i < st.Length; i++)//iが何文字目を表している 22 { 23       //***** ここから値をランダム取得 ***** 24 var quiz = st.Length; 25 var shuffledIndex = Enumerable.Range(0, st.Length).OrderBy(_ => Guid.NewGuid()).ToArray(); 26 i_n_t = shuffledIndex.Select(u => quiz[u]).ToArray(); 27 //***** ここまで ***** 28 int num = i_n_t*50;//x座標を移動 29 GameObject go = Instantiate(button, new Vector3(num,30,0), Quaternion.identity, Can.transform);//Buttonのprefabを作成 30 //Debug.Log(go.transform.childCount); 31 Text text = go.transform.Find("Text").gameObject.GetComponent<Text>(); 32 text.text = st.Substring(i_n_t,1);//一文字ずつボタンを作成 33 } 34 //tx.text = st; 35 } 36 37 // Update is called once per frame 38 void Update() 39 { 40 41 } 42} 43

上記のプログラムにエラーがありまして、i_n_t = shuffledIndex.Select(u => quiz[u]).ToArray();の部分でquiz[u]の部分に角かっこ [] 付きインデックスを 'int' 型の式に適用することはできませんと出てしまうため、実行ができない状況です。

上記のプログラムで実現させたいこと

①string型のstに、テキストファイルの中身を取得し代入する。
②stの文字の長さ(文字数)分だけ繰り返す:
1.変数quizにstの長さ(文字数)を代入。
2.変数shuffledIndexで0から始まるquizの行数分を連続して取得、昇順に並び替え、配列に変える。
3.int型の変数i_n_tで、quizの配列にある数字からランダムに取得、配列に変える。
4.int型の変数numで、i_n_tに代入されている数値*50をして、X座標の数値を指定する。
5.Prefab化したゲームオブジェクトbuttonをX座標=numとして、作成。また、Canvasの中に作成させる。
6.5.で作成したオブジェクト名をgoとし、そのオブジェクトに含まれている"Text"を探す。
7.6.で取得したオブジェクト"Text"に、i_n_tの値を〇文字目として1文字のボタンを作成。(例:i_n_t=5なら、5文字目の文字だけをボタンのテキストにする)
###条件【簡潔に伝えさせていただきます】
①one.txtにある中身が何文字かを取得
※今回は、「This is test.」という表記。(13文字)
②1文字1文字文字が書かれたボタンを作成。
例:[T] [h] [i] [s] [] [i] [s] [] [t] [e] [s] [t] [.]
③作成したボタンをランダムに配置させる
例:[s] [s] [i] [] [t] [t] [T] [.] [h] [] [i] [e] [s]
###次のプログラムまでは実装できました

C#

1st = File.ReadAllText(@"C:\TEST\one.txt"); 2 for (int i = 0; i < st.Length; i++)//iが何文字目を表している 3 { 4 5 int num = i * 50;//x座標を移動 6 GameObject go = Instantiate(button, new Vector3(num, 30, 0), Quaternion.identity, Can.transform);//Buttonのprefabを作成 7 //Debug.Log(go.transform.childCount); 8 Text text = go.transform.Find("Text").gameObject.GetComponent<Text>(); 9 text.text = st.Substring(i, 1);//一文字ずつボタンを作成 10 }

実行結果:説明](14f971ac173d7719e6dd910836a1e933.jpeg)](6c368326229396a261bc264f3c17324c.jpeg)

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

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

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

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

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

y_waiwai

2020/05/21 13:07

提示のコードではどういう動作をするんでしょうか
KS-_-SK

2020/05/21 13:20

内容を編集いたしましたので、ご確認いただけたらと存じます。
guest

回答1

0

ベストアンサー

こういうことでしょうか。

c#

1 st = File.ReadAllText(@"C:\TEST\one.txt"); 2 var shuffledIndex = Enumerable.Range(0, st.Length).OrderBy(_ => Guid.NewGuid()).ToArray(); 3 for(int i = 0; i < st.Length; i++)//iが何文字目を表している 4 { 5       //***** ここから値をランダム取得 ***** 6 i_n_t = shuffledIndex[i]; 7 //***** ここまで ***** 8 ~略~ 9 }

投稿2020/05/21 14:08

satokei

総合スコア1217

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

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

KS-_-SK

2020/05/22 00:59

その通りです。こんなに短くできたんですね! 誠に、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問