ベストアンサー ※ ChatGPTを利用し、要約された質問です(原文:引数の数によって取得する配列の深さを変更するには?) 引数の数によって配列の深さを変更する方法とは? 2012/04/17 14:46 このQ&Aのポイント 引数の数によって取得する配列の深さを変更する方法について教えてください。現状、switch文を使用して配列の深さを変更していますが、他に良い方法はありますか?回答いただけると嬉しいです。引数の数に応じて適切な配列の深さを取得する方法をご教授ください。 引数の数によって取得する配列の深さを変更するには? ※Aryは連想配列で多次元です ※evalを使用しないこと! function hoge(Ary,[p1,p2,p3...........]){ } みたいになってて arguments[1].lengthによって(p1,p2....のとこね) Ary[p1]だったり Ary[p1][p2]だったりと変更して取得したい ※回答いただいても↑のような方法以外の提案だと私の想定している使い方じゃないかもしれないです。 現状 switch(arguments[1].length)で割り振ってるけど(定義したところまでという)上限あるしなんか格好悪いのでいい方法がありましたらご教授お願いします。 質問がわかりにくいかもしれませんのでそういう時はいってくださいましー。 質問の原文を閉じる 質問の原文を表示する みんなの回答 (3) 専門家の回答 質問者が選んだベストアンサー ベストアンサー fujillin ベストアンサー率61% (1594/2576) 2012/04/17 23:45 回答No.3 #2です。 NodeListの場合はそのままでは無理みたいですが、一度、通常の配列に置換えておけば ary.map(function(e){ e.firstChild.innerHTML = "1列目"; }); ary.map(function(e){ e.childNodes[1].style.backgroundColor = "blue"; }); みたいにして、作成した関数を介さない方が、私には直感的に理解しやすいですね。 (いずれにしろ、個々の処理は個別に指定しているのですから) 質問者 お礼 2012/04/18 11:02 ありがとうございます。.map()かー NodeListはArrayじゃなくてNodeListだったんですね。 ではこんな感じかな? function(x){x. と }を書くのが面倒(そんなこと言う奴はプログラミングやめてしまえ なかなかいい感じかも。 <body> <table> <tbody> <tr><td>01</td><td>02</td><td>03</td></tr> <tr><td>11</td><td>12</td><td>13</td></tr> <tr><td>21</td><td>22</td><td>23</td></tr> </tbody> </table> <script> NodeList.prototype.access=function(Func){ var Ary=[]; for(var i=0;i<this.length;i++){Ary[i]=this[i]} Ary.map(Func); } xNodeList=document.getElementsByTagName('tr'); xValue='1列目'; xNodeList.access(function(x){x.firstChild.innerHTML=xValue}); xValue='background:blue;'; xNodeList.access(function(x){x.childNodes[1].style.cssText=xValue}); </script> </body> 動くけど.prototypeの定義方法ってこれであってるのかな・・・自信ないです 質問者 補足 2012/04/18 11:15 お礼書いた後検索してみたらMDNに似たようなのありました。 https://developer.mozilla.org/En/DOM/NodeList#Workarounds 同じような疑問を持った人の参考になれば。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 その他の回答 (2) fujillin ベストアンサー率61% (1594/2576) 2012/04/17 17:12 回答No.2 ご質問の意味をよく理解できていませんけれど… 配列から値を一つ取り出せればよいだけと、勝手に解釈して、 こんなことをやりたいのでしょうか? function hoge(){ var i, ary = arguments[0]; for(i=1; i<arguments.length; i++) ary = ary[arguments[i]]; ・・・・・・ 配列の次元と引数の数があっているかとか、いろいろなチェックが必要そうな気がしますが、本質的ではないので全部省略しています。 しかし、もしも(↑)このような意味だとするなら、関数側で面倒な解析をするよりも呼び出し側で hoge( Ary[p1][p2] ); などとするほうが、遥かに簡単でわかりやすいかと思いますが… (どうせ引数でダイレクトに指定しているだけみたいだし) 質問者 お礼 2012/04/17 20:24 回答ありがとうございます。 >for(var i=0;i<arguments.length;i++)var ary=arguments[i]; なるほどー。その発想ができなかった・・・ DOMいじってる時にinnerHTMLやstyle.cssTextとかを一括削除/設定したりする時に毎回for文書いてまわすのが面倒だなぁと思ったしだいです。 function concaino(cNodeList,cPropaty,cValue){ for(var i=0;i<cNodeList.length;i++){ var targetPropaty=cNodeList[i]; for(var p=0;p<cPropaty.length;p++){ targetPropaty=targetPropaty[cPropaty[p]] } targetPropaty=(cValue!=undefined)?cValue:null; } } こんな感じかなぁ、もうちょっとスマートにならないかな~。 一度[i][固定][固定]を定義してそれをforで回せる方がイケメン。 構造上やっぱり無理か・・・ 質問者 補足 2012/04/17 21:24 お礼の関数間違ってた。 正しくは function concaino(cNodeList,cPropaty,cValue){ for(var i=0;i<cNodeList.length;i++){ var targetPropaty=cNodeList[i]; for(var p=0;p<cPropaty.length-1;p++){ targetPropaty=targetPropaty[cPropaty[p]] } targetPropaty[cPropaty[p]]=(cValue!=undefined)?cValue:null; } } 使い方例: <table> <tbody> <tr><td>01</td><td>02</td><td>03</td></tr> <tr><td>11</td><td>12</td><td>13</td></tr> <tr><td>21</td><td>22</td><td>23</td></tr> </tbody> </table> <script> cNodeList=document.getElementsByTagName('tr'); cPropaty=['firstChild','innerHTML']; cValue="1列目"; concaino(cNodeList,cPropaty,cValue); cPropaty=['childNodes',1,'style','cssText']; cValue='background:blue;'//二行目背景青に concaino(cNodeList,cPropaty,cValue); </script> みたいに。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 yambejp ベストアンサー率51% (3827/7415) 2012/04/17 16:53 回答No.1 正直なにをしたいのかよくわかりませんが 再帰的な処理をするならこんな風にすればよいかもしれません (depthはあえて指定する必要ないと思いますがデバッグ用につけてあります) <script> var x={a:{b:{c:"d",e:"f"},g:{h:"i"},j:"k"},l:"m"}; check(x,"",0); function check(obj,arg,depth) { depth++; for(var i in obj){ document.write("depth:"+depth+","); document.write(i+":"); if((typeof obj[i]).toUpperCase()=="OBJECT"){ document.write("object"); document.write("<br>"); check(obj[i],i,depth); }else{ document.write(obj[i]); document.write("<br>"); } } } </script> 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発JavaScript 関連するQ&A 引数で指定された配列の要素数の取得 どうもこんにちは。 C言語でプログラムを作成しています。 ある関数に配列を渡すことを考えていますが、渡した配列の要素数を取得する方法は何かありますか? 標準の関数を見ても、配列の先頭アドレスのポインタとともに、配列の要素数を渡しているものばかりで、配列のポインタを渡しているものは見かけません。 要素数があらかじめわかっていれば、それを引数の型に指定できますが、呼び出されるまで不明な場合はうまくいきません。 配列の要素数も引数として一緒に渡す必要がありますか? [作ってみたサンプル] #include <stdio.h> #include <stdlib.h> #include <string.h> // func1 と func2 をまとめられないだろうか。。。 void func1(int (*p)[10]) { ________int n = sizeof(*p) / sizeof((*p)[0]); ________int i; ________for (i = 0; i < n; i++) { ________________printf("%d\n", (*p)[i]); ________} ________printf("\n"); } void func2(int (*p)[5]) { ________int n = sizeof(*p) / sizeof((*p)[0]); ________int i; ________for (i = 0; i < n; i++) { ________________printf("%d\n", (*p)[i]); ________} ________printf("\n"); } int main(int argc, char *argv[]) { ________int ary1[10] = { 2, 4, 6, 8, 0, 1, 3, 5, 7, 9 }; ________int ary2[5] = { 3, 6, 9, 12, 15 }; ________func1(&ary1); ________func2(&ary2); ________return 0; } C#で、引数における一次元と二次元配列の取り扱い C#について質問させていただきます。 以下のようにすればそれぞれ一次元配列と二次元配列を格納出来ますが 同時に一つの引数に収めることは無理なのでしょうか? public static void Join(string[] Ary_str){ 本文 } public static void Join(string[ , ] Ary_str){ 本文 } そのために、例えば以下のようにしたとします。 public static void Join(object Ary_obj){ 本文 } こうすれば一次元でも二次元でも格納出来ますが 格納された値が何次元配列なのか確認するために Ary_obj.Rank としてもエラーになってしまいます。 (1)Objectに格納した値が何次元配列なのか確認する方法か (2)一次元でも二次元でも格納できる引数の指定方法 をご存じの方、ぜひお教え願います。>< xmlから配列で取得したものを取り出したい as3初心者jpncan15といいます。 xmlから配列で取得したものをfunction外で取り出したいのですがどのようにすればいいのか悩んでいます。functionを調べたり配列を調べたり頭がかなり混乱中です。 お手数ですがご教授いただけますでしょうか? var ary:Array=new Array(); var ary_name:Array=new Array(); var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest("b.xml"); var xml:XML; loader.load(request); loader.addEventListener(Event.COMPLETE , XMLload); function XMLload(e:Event):void { xml = XML(e.target.data); num_txt.text = xml.item.length(); //xml件数をテキストフィールドへ入れる for each(var element:Object in xml.item.thumb) //配列に入れる {ary.push(element);} for each(var element_name:Object in xml.item.name) //配列に入れる {ary_name.push(element_name); trace(element_name);}//出力OK } //function外で配列を使用したい trace(ary[5]); trace(ary_name[2]); ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム 2次元の連想配列を順次読み込みするには? PHP初心者です。 元の連想配列($ary1) Array ( [2004] => Array ( [03] => 03 [02] => 02 ) [2003] => Array ( [12] => 12 ) ) $ary1の値だけを$ary2に抽出する。 $ary2 = array_values($ary1); すると、こんな内容になります。 Array ( [0] => Array ( [03] => 03 [02] => 02 ) [1] => Array ( [12] => 12 ) ) ここまで来ると上位階層は$ary2[0]、[1]で読めそうですが、 下位階層まで考えると$ary2[0][03]、$ary2[0][02]になっています。 これを$ary2[0][0]、$ary2[0][1]という風に順次読み込みたいのですが、 いい方法が見つかりません。 つまり2次元の下位階層も[0]~のインデックスとしたいのです。 関数とarguments配列 ●質問の主旨 下記サイト、CodeStudyによる JavaScriptの関数とarguments配列の 使い方に関する問題に対する 答えとなるコードの記述が分かりません。 どなたかアドバイスをお願いします。 CodeStudy 関数その2 3.arguments その3 http://jeek.jp/study/section18/3 ●問題文 関数checkが定義されています。 check内のif文により、引数が3つ以外の際は、 outputで"引数が3つではありません。"と出力させましょう。 function check(x, y, z) { if() { output("引数が3つではありません。"); } } check(1, 2, 3, 4); ●自分で作った途中経過 resultやreturnの使い方がよく分かりません。 function check(x, y, z) { var result = 0; if(arguments.length !== 3) { output("引数が3つではありません。"); } return result; } check(1, 2, 3, 4); output(check); ●コードの条件(ヒント) argumentsは、引数を格納する配列で、 argumentsを使うと引数をいくつでもとることが出来ます。 また、argumentsは配列なので、 .lengthを使うと長さが求められます。 2次元配列から条件抽出した要素の操作 ある2次元配列から条件に合う要素だけ抜き出し、 抜き出した要素でまた2次元配列を作りたいのですがうまくいきません。 ary=[[3,7,5,6,],[4,7,3,9],[2,5,3,7],[8,1,4,3]] ary.each{|x| if x[1]>3 p x end } というかんじで条件抽出しているのですが、 ここで得た出力をまた [[4,7,3,9],[8,1,4,3]] というような2次元配列にしたいのですがやりかたがわかりません。 連想配列のキー値(連番)を基に、別の配列を作るには? 下記のように、キー値の一部に連番を持った連想配列 があるのですが、このキー値と連番で別の配列を 簡単に作る方法は無いでしょうか? もとの配列 $ary = array("item0"=>"x","item1"=>"y","item2"=>"z","data0"=>"o","data1"=>"p","data2"=>"q"); 上の$aryから $item=array([0]=>"x",[1]=>"y",[2]=>"z"); $data=array([0]=>"o",[1]=>"p",[2]=>"q"); のような形の配列を得たいのです。 foreach($ary as $key => $val){ } の構文で、$key値を調べて分断し、新しい配列に pushしていくしかないでしょうか? ※PHP4.3です 多次元配列とfor文について javascriptの配列について質問です。 例えば: var arrXXX = new Array(); function samplefunc{ //3次元配列の種類の作成 for (m = 0; m < aaa.length ; m++) { //連想配列作成 arrXXX .push(aaa[m]); } for (j = 0; j < bbb.length; j++) { for (i = 0; i < ccc.length; i++) { arrXXX[aaa[j]] = new Array(ccc.length); arrXXX[aaa[j]][i] = new Array(ccc.length); for (k = 0; k < ddd.length; k++) { arrXXX[aaa[j]][i][k] = eee; ここでは配列を適切に使える・・・ } } } ここでarrXXXを使いたいが、3次元配列でなくなっている?! arrXXX[~][0][0]はnullまたはオブジェクトではありません・・・がでます。 } 結局、for文を完全にでてしまうと、せっかくつくった配列がダメになってしまいます。どうすればfor文外で配列を使用できるのか教えてください! 関数の引数として配列を渡す方法 初めて質問させていただきます。 現在下記のように関数に配列の引数を渡して、配列の個数を表示しているのですが、必ず0件になってしまいます。 <html> <head> <title>連続して関数を呼び出す</title> <script language="JavaScript"> <!-- function aaa (est) { alert(est.length); return; } // --> </script> </head> <body> <script language="JavaScript"> <!-- var hai = new Array(); hai["a"] = true; hai["b"] = false; aaa(hai); // --> </script> </body> </html> もしかしたら、受け渡し方が悪いのかもしれないのですが、色々調べても分からなかったので質問させていただきました。 argumentsというものを使うのかもしれませんがうまくいきませんでした。 分かる方がいらっしゃいましたら、ご教授ください。 配列の中身を順番に可変長定義関数に渡すには 好きなだけ引数が渡せる関数があり、その引数に任意の配列の中身をeval関数を使わずに一つずつ渡したいのですが、どうすればいいのでしょうか。eval関数を使った場合は以下のような感じです。 $list=array("apple","banana","orange"); function hoge(){ print_r(func_get_args()); } $arg=implode ('","',$list); eval('hoge("'.$arg.'");');//hoge("apple","banana","orange"); よろしくお願いいたします。 配列の中身を全て順番に別の関数へ引数として渡すには 配列の中身を全て順番に別の関数へ引数として渡すには、どうすればよいでしょうか? このままだと、'null' は Null またはオブジェクトではありません。 となります。 function piyo(hoge){ alert(hoge); } for (var i = 0; i < hogearray.length; i ++) { piyo(hogearray[i]);//ここを通ったら、順番の関数を呼び出すようにしたい } また、グローバル変数として渡すには、どうすればよいでしょうか? Javascriptで二次元配列で高次元の配列サイズを取得する方法を教えてください。 Javascriptで二次元配列で高次元の配列サイズを取得する方法を教えてください。 var data = [ [1,2,3], [4,5,6], [7,8,9] ]; for (var i = 0; i < data.length; i++){ for (var j = 0; j < data[i].length; j++){ <--- ここで lengthのオブジェクトがNullというエラーになります。 alert(data[i][j]); } } よろしくお願いいたします。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム 多次元連想配列 phpで $juices["apple"]["green"] = "good"; このように多次元連想配列を簡単に生成できますが、javaでは、どのように行えばいいのでしょうか? いろいろな方法があると思われるのですが、javaでこのような多次元連想配列をスマートに実現する方法をご教授いただきたく質問させていただきました。 【エクセルVBA】Functionの引数として、配列は使えるのでしょうか? VBA初心者です。 Function で関数を定義するとき、その引数に配列を使う方法はあるのでしょうか? たとえば Function Test (C as double,n as integer) というFunctionの C に3×3の行列を入れたいのですが…。 関数先にて配列の長さを取得する方法 関数にて、引数にて渡された配列(ポインタ)から配列数を調べる方法はないでしょうか? #include <stdio.h> void test(unsigned int *p){ printf ("%d\n", sizeof(*p)/sizeof(p[0])); //結果 1 } int main(){ unsigned int hoge[] = {0x30, 0x31,0x32}; test(hoge); printf("%d", sizeof(hoge)/sizeof(hoge[0])); //結果3 return 1; } 上記コードの関数testの*pから配列の数3が抜き取りたいと思っております。 よろしくお願いします。 【MATLAB】任意の多次元配列からの配列の抽出 ベクトルvから複数の要素を抽出し,新しいベクトルuを生成する方法には,以下のようにインデックスを指定する方法があります. idx = [3 10 15 28]; u = v(idx); この方法を拡張し,以下のようにN次元配列Aのi次元目のインデックスを指定することで複数の配列を抽出し,新しい配列Bを得ようと考えています. idx = [3 10 15 28]; B = A(:,:, ・・・ ,:,idx,:, ・・・ ,:,:); Aの次元Nはi以上の任意の値で,iは予め指定された値である場合, 配列Bを得る方法はございますでしょうか. 現在,私は以下のような方法で計算しておりますが,コマンド「eval」を用いて力技でしのいでいる感じで,最適な方法が他にあるのでは,と考えております. N = length(size(A)); idx = [3 10 15 28]; i = 3; buf = 'A('; for s = 1:N if s == i buf = [buf 'idx']; else buf = [buf ':']; end if s < N buf = [buf ',']; end end buf = [buf ')']; B = eval(buf); サイズのわからない配列 お世話になっております。 最初からサイズの不明な配列を扱いたいときに、いろいろ調べたら 配列が1次元の場合、次のような方法で扱えることがわかりました。 dim userlist as new list(of string) 'List dim user as string() '配列 userlist.add("taro") userlist.add("hanako") user = userlist.toarray 'Listを配列に変換 debug.print(user.length) '配列のサイズを求める ところが、配列が2次元の場合、Listは使えないようなのです。 UserID password ------+--------- taro abc hanako xyz こんな感じの2次元データを最初から配列の大きさを定義すること なく利用したいのですが、何か良い方法がございましたら、ご教授 のほどお願いいたします。 多次元配列を連想配列へ変換したい 以下のような多次元配列を、 Array ( [0] => Array ( [0] => Array ( [id] => 3 [hoge_id] => 15 ) ) [1] => Array ( [0] => Array ( [id] => 9 [hoge_id] => 15 ) ) [2] => Array ( [0] => Array ( [id] => 18 [hoge_id] => 15 ) ) [3] => Array ( [0] => Array ( [id] => 22 [hoge_id] => 15 ) [1] => Array ( [id] => 22 [hoge_id] => 15 ) [2] => Array ( [id] => 22 [hoge_id] => 15 ) ) ) 下記のような連想配列へ変換したいです Array ( [0] => Array ( [id] => 3 [hoge_id] => 15 ) [1] => Array ( [id] => 9 [hoge_id] => 15 ) [2] => Array ( [id] => 18 [hoge_id] => 15 ) [3] => Array ( [id] => 22 [hoge_id] => 15 ) [4] => Array ( [id] => 22 [hoge_id] => 15 ) [5] => Array ( [id] => 22 [hoge_id] => 15 ) ) 引数の渡し方 いつもお世話になっています。 外部テキスト(data.txt)を読み込んで、内容を配列(txtN)に格納、 表示するスクリプトを組んでいます。 myNameは複数あり、ボタンから渡される引数に応じて myNameを切り替えてtrace(実際には表示)させたいんですが、方法が分かりません。 以下フレームアクション //Shift-JISで読み込む System.useCodepage = true; load_obj = new LoadVars(); load_obj.load( "data.txt" ); load_obj.onLoad = function( success ){ //正常終了時、カンマで分割して配列に格納 if( success ){ my_ary = new Array(); my_ary = load_obj.myName.split(","); } txt01=my_ary[0]; txt02=my_ary[1]; txt03=my_ary[2]; txt04=my_ary[3]; trace(txt01); trace(txt02); trace(txt03); trace(txt04); }; stop(); よろしくお願いします。 jqueryのajax()内からグローバル配列に jqueryのajax(){success: function()内からグローバル連想配列に値を格納したい。 jqueryのajax()でhtmlファイルを読み込み配列に格納。 その後他の関数で使いたいと考えていますが グローバル連想配列に格納できません。 success: function()内でさらに関数を定義もして見ましたが反応せず。。。 (プルダウンメニューを変更したら実行する関数) 以下ソースになります。 ----------------------------------------------------------- $(function() { objectarray = new Object(); $.ajax({ type: 'GET', url: 'hoge.html', dataType: 'html', success: function(data) { var text = []; $(data).each(function(i){ text = $(this).text().split("\n"); }); var alldata = $.grep(text, function(e){return e;});//空白やデータなしを削除 for(i=0; i<alldata.length; i++){ objectarray[i] = (alldata[i]); alert("forの中" + objectarray[i]);//取得できた } alert("forの外" + objectarray);//取得できた return objectarray;//あってもなくても変わらない。。。 }, error:function() { alert('問題がありました。htmlデータがありませんでした。'); } //return objectarray;←有効にするとjsが認識されなくなります。 }); alert("ajaxの外" + objectarray[0]);//何も表示されない、firebugでみるとobjectarrayには値が入っている。 }); ----------------------------------------------------------- 上記はnew Object()でやっておりますがnew Array()でも同じ結果でした。 回避策をご教授いただけましたら幸いです。 どうぞよろしくお願いいたします。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
ありがとうございます。.map()かー NodeListはArrayじゃなくてNodeListだったんですね。 ではこんな感じかな? function(x){x. と }を書くのが面倒(そんなこと言う奴はプログラミングやめてしまえ なかなかいい感じかも。 <body> <table> <tbody> <tr><td>01</td><td>02</td><td>03</td></tr> <tr><td>11</td><td>12</td><td>13</td></tr> <tr><td>21</td><td>22</td><td>23</td></tr> </tbody> </table> <script> NodeList.prototype.access=function(Func){ var Ary=[]; for(var i=0;i<this.length;i++){Ary[i]=this[i]} Ary.map(Func); } xNodeList=document.getElementsByTagName('tr'); xValue='1列目'; xNodeList.access(function(x){x.firstChild.innerHTML=xValue}); xValue='background:blue;'; xNodeList.access(function(x){x.childNodes[1].style.cssText=xValue}); </script> </body> 動くけど.prototypeの定義方法ってこれであってるのかな・・・自信ないです
補足
お礼書いた後検索してみたらMDNに似たようなのありました。 https://developer.mozilla.org/En/DOM/NodeList#Workarounds 同じような疑問を持った人の参考になれば。