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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

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

Q&A

解決済

2回答

1813閲覧

ハッシュテーブル内のオブジェクト内のプロパティの取得について

agu

総合スコア41

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

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

0グッド

0クリップ

投稿2016/01/30 07:24

編集2016/01/31 06:23

ハッシュテーブルの中にオブジェクトを入れて、そのオブジェクトのプロパティを取得したいのですが、うまくいきません。
現在は下記のようなソースで、正しくオブジェクトが入れられているのか確認したいのですが、それが上手くいっていないので、正しい入れ方になっているかどうかも分からないところではあるのですが・・・どなたか教えて頂けないでしょうか。宜しくお願い致します。


var data : Hashtable = new Hashtable();
var textA : オブジェクトのプロパティ内容。CSVからのデータが入っています。

function Test(){
var textA = txt.Split("\n"[0]);
for(var a=0;a<textA.length;a++){
var temp = textA[a].Split(","[0]);
data.Add(temp[0],0);
var t ={"tname":temp[1],"color":temp[2],"speed":temp[3],"text":temp[4]};
data[temp[0]] = t;
Debug.Log(data[temp[0]]["tname"]);//←ここで躓いてます。
}
}

内容としては、CSVから読みとったデータをtextAに入れており(0行目はID)、
それを分割してオブジェクトのプロパティとしたいと思っています。
また、そのオブジェクトは複数あり、ハッシュテーブル内にID別にオブジェクトを代入しています。

■追記
下記サイトにて、「ハッシュテーブルにオブジェクトを格納したり、そこから取り出したりするには、キーとして使用するオブジェクトに、hashCode メソッドと equals メソッドが実装されていなければなりません。」というのを見つけたのですが、これが関わっているのでしょうか?
もしそのようであれば、具体的にどのようにしたらいいのか教えて頂けると大変ありがたいです。

■URL
https://docs.oracle.com/javase/jp/6/api/java/util/Hashtable.html

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

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

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

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

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

guest

回答2

0

ベストアンサー

どうやら格納されているオブジェクトへのアクセスの際は
型を指定する必要があるようです。

javascript

1var data = {}; 2var txt = "a1,a2,a3,a4,a5\nb1,b2,b3,b4,b5\nc1,c2,c3,c4,c5\n"; 3 4var textA = txt.Split("\n"[0]); 5for(var a=0; a<textA.length; a++) 6{ 7 var temp = textA[a].Split(","[0]); 8 if (temp.length != 5) continue; 9 10 var t = {"tname":temp[1],"color":temp[2],"speed":temp[3],"text":temp[4]}; 11 data[temp[0]] = t; 12 13 Debug.Log( (data[temp[0]] as Hashtable)["tname"] ); 14}

投稿2016/02/01 03:05

buibui80

総合スコア1033

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

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

agu

2016/02/01 08:03

できました! dataもオブジェクトとして、ハッシュテーブルに変換してからアクセスするんですね! お恥ずかしながらas演算子というものも初めて知りました。これから活用させて頂きます。 buibui80さんには今回で3度も助言を頂いておりました。 いつもすみませんが大変助かっています。ありがとうございます! これからもがんばって勉強を続けていきたいと思います!
guest

0

Hashtable の問題かCSV(split)の問題か切り分けするとしまして、
dataに代入する前にtempの中身を個別にログ出力してみたらどうでしょうか?

余談ですが、

javascript

1var t = {};

と出来るなら、
dataもHashtableにせず

javascript

1var data = {}; 2var t = {}; 3data[temp[0]] = t;

とした方がJavascriptっぽいのかなと思いますがどうなのでしょう。
Unity上のJavascriptを詳しく知らないので間違いかもしれませんが。

投稿2016/01/31 02:16

buibui80

総合スコア1033

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

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

agu

2016/01/31 06:17

ご回答いただきありがとうございます! tempとtの中身はログで出すことが出来たので確認が出来たのですが、 dataの中に入れた後での取得が出来ていない状況になります。 data[temp[0]]でとりあえずtemp[0]の中にオブジェクトが入っていることの確認まではできるのですが、["tname"]を加えるとType 'Object' does not support slicing.というエラーが出てしまいます。 スライスが出来ないということなのでこの部分の書き方が誤っているのだろうとは思っているのですが、いろいろ試したり調べたりしたもののうまくいかず。。。 ハッシュをオブジェクトにしてみるのも結果は同じようでしたが、 ハッシュにしなければ!と思い込んでいたので選択肢が増えたように思います。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問