オブジェクトから二次元配列へ指定条件下で変換!結果データの取得方法は?

このQ&Aのポイント
  • オブジェクトから二次元配列への変換方法を教えてください。
  • 指定条件下で結果データを取得する方法を教えてください。
  • 元データが配列の場合でも同じ結果を得る方法はありますか?
回答を見る
  • ベストアンサー

オブジェクトから二次元配列へ指定条件下で変換したい

下記「元データ」から、やりたいことに基づき、「結果データ」を取得するにはどうすればよいでしょうか? ■元データ(オブジェクト) { "0":["東京","1","n1"], "1":["大阪","2","n2"], "2":["京都","3","n3"], "3":["福岡","4","n4"], "4":["東京","5","n5"], "5":["東京","7","n6"], "6":["大阪","1","n7"] } ■やりたいこと 1.「配列0番目の値」で名寄せ 2.「配列1番目の値」の合計数を、新たな配列1番目に配置 3.「配列1番目の値」の重複カウント数を、新たな配列2番目に配置 ■結果データ(配列) [ ['東京',13,'3'], ['大阪',3,'2'], ['京都',3,'1'], ['福岡',4,'1'] ]; ------------------------------------------------------------------------------ また、元データが配列だった場合、同じ結果を求めるのはどうすれば良いでしょうか? ■元データ [ ['東京',1,'n1'], ['大阪',2,'n2'], ['京都',3,'n3'], ['福岡',4,'n4'] ['東京',5,'n5'] ['東京',7,'n6'] ['大阪',1,'n7'] ];

  • re97
  • お礼率80% (601/744)

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

基本的な考え方として、元データを走査して結果用の配列(またはオブジェクト)に記録して行けば良いのではないでしょうか? >また、元データが配列だった場合、同じ結果を求めるのはどうすれば良いでしょうか オブジェクトなら  for(var key in array){ ~~ 配列なら  for(var i=0; i<array.length; i++){ ~~ で走査する感じ。 配列であれば forEach() で処理する方がより簡単かと思います。 ご提示のオブジェクトの場合、key("0","1","2"…)は使わないみたいですので、その値(配列)の[0],[1]のデータのみを利用することになりそうですね。 keyの「"0","1","2"…」が保証されているのなら、連番のindex(=key)を用いて配列と同様の処理を行うこともできるでしょう。 重複を確認するには、結果のデータをオブジェクトにしておいて、  {   '東京': [13, 3],   '大阪': [3, 2],   '京都': [3, 1],   ・・・・・  } のようにしておく方が、重複のチェックが簡単だと思います。  ・keyがすでに存在すれば、配列[0]の値に加算、配列[1]の値を+1  ・keyが存在しなければ、配列[0]に値をセット、配列[1]=1 として処理してゆけばよさそう。 結果を配列に直接収める場合は、 重複のチェックは、その時点での結果データをスキャンして同じものがあるかをチェックするという方法が異なるだけで、あとは上記のオブジェクトの場合と同様の処理を行うことでよいのではないでしょうか。

re97
質問者

お礼

回答ありがとうございました。 参考になりましたー

関連するQ&A

  • 多次元配列の意味がわかりません。

    プログラミング初心者です。 以下の配列の記述があったのですが、どのような配列なのか理解できていません。 すみません。教えていただけますでしょうか。 $n = count($entry_count); for($i=0;$i<$n;$i++){ for($j=$n-1;$j>$i;$j--){ if分が続きます。 } } 私の理解が間違っていなければ、iは行数jは列数と理解しています。 $nが何を示しているのか推測でしか言えませんが、列数と考えれば良いでしょうか? それともデータの件数と考えれば良いでしょうか? 内容はjの初期値がn-1(件数よりマイナス1)として、iより大きい間、jを1つずつ減らしていき iは1つずつ足していく様です。 分からないのは以下の点です。 ・$nはデータの件数でしょうか?  もしそうであればiは始めのfor分はその件数分繰り返すと考えると分かります。  但し、jはどのように理解すれば良いか分かりません。 ・$jがもし列数と考えれば、なぜ初期値が$jの値がマイナス1なのか。  配列のインデックスが0から始まるからでしょうか? ・$jをなぜ1つずつ減らしていくのでしょうか?  列数を1つずつ減らしていくというのは、そのデータの列を前から読み込んでいくという処理の  意味の記述でしょうか? 要するにiとjが何かが理解できていません。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • C# 配列の配列(多次元配列?)

    C#において、配列の配列中に格納した値を、検索することを 行いたいのですが、格納した値そのものを見ることができません。 まだ、C#を始めて間もないので、配列に格納する時点で、 不備があるかも知れませんが、お願いします。 やりたいこと ・テキストファイル内にある値を、2次元配列または、多次元配列に格納 ・配列に格納した値で、データチェックなどを行う予定  テキストファイル内のデータは、下記内容となり要素数も固定ではなく変動する   A=1,2,3・・・   B=11,22,33・・・ 実際のソースは、 //配列 ArrayList list = new ArrayList(); //配列格納 1レコード毎用 ArrayList listtmp = new ArrayList(); while ((strGenderTextLine = objReader.ReadLine()) != null) {  string strBuffer;  //「=」前の値格納用変数  string[] strBuffer2; //「=」後の値格納用配列  listtmp=null;  //strtmpに「=」前の値を格納  strtmp = TextLine.Split('=').GetValue(0).ToString();  //strtmp2に「=」後の値を格納(配列)  strtmp2 = TextLine.Split('=').GetValue(1).ToString().Split(',');  for (int i = 0; i <= strtmp2.Length - 1; i ++)  {   //[i,0]に、「=」前の値を代入   if (i == 0)   {   listtmp.Add(strtmp);   }   else   {   listtmp.Add(strtmp2[i].ToString());   }  }  //list配列にlistTmp配列を格納(配列の配列)  list.Add(listtmp);  intT = intT + strtmp2.Length;  //行数カウント  intTLine = intTLine + 1;  } ここから、配列「list」内に入っている値を閲覧することができる方法を教えていただければと思います。 宜しくお願いいたします。

  • 配列

    適当な記述ですが、次を見てください。 void roll(int *c) { int n, b2[8]; if(t<3) { for(n=0; n<8; n++) b2[n]=c[n]; for(n=0; n<8; n++) c[b2[n]]=7-n; for(n=0; n<8; n++) printf("%d",c[n]); printf("\n"); t++; roll(c); } else t=0; } int main() { int b[]={3,6,4,0,7,2,5,1}; roll(b); for(n=0; n<8; n++) printf("%d",b[n]); //36407251が表示されるようにしたい。 return(0); } rollが何の関数かは省略しますが、rollにmainのb(ポインタ?)を渡し、ある処理をして,それでmainに戻ってきた時にb[]を表示すると、36407251が表示されません。 ポインタを引数にするってことはポインタでさしてるとこをrollで操作してるわけですよね? そうすれば変わって当然だとはおもいます。 でも関数1で関数2に配列1を渡し、その関数2の中でで配列1の値が変化しても、元の関数1にもどれば配列1のまま変化していないようにするにはどうすればいいですか? やはり もう1つ配列を用意しなきゃだめなのでしょうか。

  • 多次元配列の行列

    1番 キーボードから3×3の行列の要素を2次元配列に入力した後、その値を表示するプログラムをさくせいせよ 2番 キーボードから3×4の行列の要素を2次元配列に入力した後、転置行列を出力するプログラムをさくせいせよ 3番 2つの行列A(3×3行列)、B(3×3行列)の買う要素の値をキーボードから2つの配列に入力し、2つの行列、並びに、それらの和、差、積の行列を出力するプログラムを作成せよ(Bに単位行列を入れて検算せよ) 4番 2行3列の行列と3行2列の積を求めるプログラムを作成せよ どなたかわからないでしょうか?? 数が多くてすみません。 わかる方お願いします!!

  • 動的配列の利用方法について

    いつも御指導頂きありがとうございます。 度々ですが、質問させて頂きます。 Mysqlで、クエリを実行して次の文でデータを抜き出すのですが、 while ($row = mysql_fetch_assoc($res)) { ?> <a href= "1test.php?pref_id=<? echo $row['pref_id'] ?>"><? echo $row['pref_name'] ?></a><br> $pref_id=$row['pref_id']; <? } $pref_id //←ここが? ?> としてループで、データを下記のように表示しています。 28兵庫 27大阪 26京都 25滋賀 ループ{}から外れて変数に格納されている値を使おうとすると 当然ですが、一番最後の値の25滋賀が表示されて しまいます。 このデータの結果を利用したいのですが、 データの個数が変化する動的配列というのでしょうか? 配列に入れて、何番目の値という形で 違う場面でデータを利用したのですが方法がわかりません。 26京都を選びたいのですが、どうしたら京都が反映されるのか御指導お願いします。 表現がうまく伝わるといいのですが、いかがでしょうか? 御指導お願いします。

    • 締切済み
    • PHP
  • クラス内での二次元配列の定義

    今、1次連立方程式を解くプログラムを作っているのですが、方程式の大きさが分からないことには解けないですよね。のでNEWを使って動的配列を作ったつもりでしたが、出来ません。こんな感じで書いたんです。 class epu{ double *data; ... epu(int a){ n=a; data=new double[n][n]; } どうすればいいでしょうか?

  • 配列の問題

    配列の問題です。 n個の要素を持つ一次元配列の値(変数値)をまったく逆に入れ替えるプログラムを作りたいのですが、この場合どのようにして逆を表現すればよいのかわかりません。 (nの値は読み込み、配列は奇数個でも偶数個でも使えるプログラムでなければなりません) 参考書を見ながら作ってみたのですが…だめでした。 プログラム初心者です。アドバイスお願いします。 int main(void) { int i,n; int vc[n]; printf("n個の要素を持つ一次元配列をつくる\n"); printf("nの値を入力してください\n"); scanf("%d",&n); for (i=0;i<n+1;i++) vc[i]=i+1; for (i=0;i<5;i++) printf("vc[%d]=%d\n",i,vc[i]); printf("この配列を逆に入れ替えると\n); return 0; }

  • 2次元配列のコピーについて

    2次元配列のコピーについて質問があります。 $Aが元の2次元配列、$Bがコピー先だとして、 ${$A}[0..N][0..N]に値が入っているとします。 ここで、$Bの代入を、$B=$Aとやってしまうと、$Aと$Bが連動してしまいます。 ($Bが書き換わったのに$Aも書き換わる) これはなぜなのでしょうか。 また、$Bの代入を、配列を走査して foreach (0.. $#{$A}) {  my ($i) = $_;  foreach (0.. $#{${$A}[$i]})  {   my ($j) = $_;   ${$B}[$i][$j] = ${$A}[$i][$j];  } } とすれば問題ないのですが、あまりスマートだと思えません。 もっとスマートにコピーする方法はありますか?

    • ベストアンサー
    • Perl
  • 多次元配列のソート

    過去に同様の質問があったのですが、未回答でしたので質問させていただきます。 多次元配列のうちの一つの列の値でソートし、その他の列にも結果を連動させたいのですが方法が分かりません。 たとえば、a[n][m]という配列で a[0][0]=C a[0][1]=う         a[0][0]=A a[0][1]=あ a[1][0]=A a[1][1]=あ   →    a[1][0]=B a[1][1]=い a[2][0]=B a[2][1]=い         a[2][0]=C a[2][1]=う というように、n列でソートしm列でもその結果で並べ替えたいです。 恐らくComparatorインタフェースを使用すると可能かと思うのですが、方法を教えて頂けないでしょうか。

    • ベストアンサー
    • Java
  • 連想配列で値が空だったら、要素を削除したいのですが

    連想配列で値が空だったら、要素を削除したいのですが、どうすればよいでしょうか? ▼元の配列 array { [1]=>"東京" [2]=>"京都" [3]=> ""←string [7]=>"横浜" [24]=>"奈良" [5]=> ""←string }    ↓ ▼こういう配列にしたい array { [1]=>"東京" [2]=>"京都" [7]=>"横浜" [24]=>"奈良" }

    • ベストアンサー
    • PHP

専門家に質問してみよう