• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBScript で動的配列 )

VBScriptで動的配列を使いたい!探しています

このQ&Aのポイント
  • VBScriptで動的配列を実装するためのクラスを探しています。
  • C++のSTLで使えるようなvector/listのように、要素を追加/列挙/削除できるクラスを探しています。
  • ReDimやDictionaryを使用せずに、独自のクラスを使わずに動的配列を扱えるものが望ましいです。

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

  • ベストアンサー
回答No.1

質問者さんが自身で大体の答えを出しているような・・・・ CreateObject("Scripting.Dictionary") がVBScriptで使える、一番要求に似たものだと思います。 すでにご覧になっているとは思いますが、一応のURL http://www.whitire.com/vbs/tips0090.html C++経験者であれば、VBScpritにこだわらず、Javascriptの方がよくないですか? VBScriptでなければ出来ないことであれば話は別ですが、、、 リストっぽいような事の簡単なサンプルです。 [sample.js] ///////////////////////////////// //list ary1を定義 要素番号で追加 var ary1 = new Array(); ary1[0] = "red"; ary1[1] = "blue"; ary1[2] = "green"; ary1[3] = "white"; ary1[4] = "black"; WScript.Echo("debug1:\r\n" + ary1.join()); //0番目(Index値)から1個削除 ary1.splice(0,1); WScript.Echo("debug2:\r\n" + ary1.join()); //1番目(Index値)から2個削除 ary1.splice(1,2); WScript.Echo("debug3:\r\n" + ary1.join()); ///////////////////////////////// 参考URL http://www.baldanders.info/spiegel/remark/archives/000178.shtml http://pzxa85.hp.infoseek.co.jp/www/wwwjsarr.htm

KrauserII
質問者

お礼

VBScriptでは、そのままvector/listとして使えるようなクラスはない、というご意見 (もしくは事実) ですね。了解です。ありがとうございました。 Javaのサンプルや参考URLもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • IDの自動採番について

    次のような要件で、各要素に自動的にIDを採番したいのですが、最も効率的なやり方はどのような方法でしょうか? ・各要素は連想配列に格納される(MFCならCMap等) ・要素は一つずつ配列に追加される。追加する際、IDを自動採番して、これをキーとする。 ・任意の要素を、キー(自動採番されたID)指定で削除することが出来る。 ・IDの最大値は最小化したい。 最後の要件は、IDの値そのものにある意味を持たせているため、可能な限りIDの値を大きくしたくありません。つまり、ある要素を削除した場合、IDも同時に削除されますが、そのID値を次に追加する要素で再利用したいと言うことです。 IDは所謂主キーですので、要素を削除した際にID値を前に詰めるような事はもちろん出来ません。一旦ある要素にIDを割り当てると、その要素が削除されるまで値を変更することは出来ません。 格納される要素をElementとすると ID - Element ------------ 1 - Element[1] 2 - Element[2] 3 - Element[3] 4 - Element[4] 5 - Element[5] このような配列になっていた場合、ID"3"の要素を削除すると配列は下記のようになります。 ID - Element ------------ 1 - Element[1] 2 - Element[2] 4 - Element[4] 5 - Element[5] 次に6番目の要素を挿入する際、その要素にID"3"を割り当てます。 key - Element ------------ 1 - Element[1] 2 - Element[2] 4 - Element[4] 5 - Element[5] 3 - Element[6] このように常に「IDの最大値=配列のサイズ」となるようにしておきたいのです。 配列内の並びは使用する配列クラスの実装に依りますので、必ずしも上記のようになっているわけではありません。 要素がオブジェクト型で、かつIDとして割り当てる数値も単なる数値以上の意味を持たせるため、連想配列はCMapPtrToPtrクラス(またはそれに相当するクラス)で実装したいと思っています。 この場合、要素追加の度に、一旦全てのキー(ID)を配列から取り出して、ソートしてから空きIDを探し、そのIDを新規追加要素に割り当てる方法しかないのでしょうか? このような事をもっとシンプルに実現したクラス等はないのでしょうか? データベース等の外部ソフトウェアは使用しないものとします。

  • C言語で使うことの出来る配列のLIB

    C言語から使うことの出来るSTLのコンテナクラスのようなものはありますでしょうか? 配列の追加、削除、検索、更新を高速で処理したいので(LIST構造)、汎用的に使えるLIBのようなものがあれば教えていただきたいです。

  • Listのiteratorインターフェースについて

    Listのiteratorインターフェースについて教えてください。 ABCD EFGH NULL IJKL (cont) というような配列を持ったオブジェクトの各要素を順に読み、もし、その要素が'NULL'という文字列を持っていたらスペースに置き換えたいののですが、方法がわかなくて困っています。 Listのiteratorインターフェースに要素を追加したり、削除したりするメソッドがあることはわかったのですが、更新の方法はあるのでしょうか。 もし、あればそのメソッドを教えてください。

    • ベストアンサー
    • Java
  • 要素数がプログラム内で変化する配列のクラス間のやりとり

    随分初歩的な質問をしているとは思うのですが、解決方法がみつからないので質問をお願いします。 C++で配列をクラスから呼び出すときに、そのクラスの要素数がプログラム内で変化する場合、 どのようにするのが良いのでしょうか? Class class_A { private: プログラム内で要素数が変化する配列 public: get_hairetu(){return 上の配列} } Class class_A::openfile { テキストからデータ読み込み データ数に応じて配列の大きさが変化 } int main(void) { class_A A; 配列=A.get_hairetu(); ↑ここでclass_Aで決定した配列の要素数に応じて配列の要素数を変化させたいです } なるべくリストではなく配列で作成したいのですが、配列を全クラスで共有する方法があればそちらをお願いします。 (class_Aとmainはそれぞれ別のcppファイルに記述しています) vector型で配列を作ることも考えたのですが、VC++ではなぜか使えませんでした。 質問内容が曖昧で申し訳ありませんが、ぜひ回答をお願いします。

  • オブジェクトを配列として扱いたい

    Java(オブジェクト指向)を始めて数日の者です。 LinkedListを利用し、インスタンス化したオブジェクトをListに入れて 扱えるようにしたいと考えています。 具体的には LinkedList<クラス名> array = new LinkedList<クラス名>(); クラス名 object1 = new クラス名(); -object1の処理- array.add(object1); -object1の処理- array.add(object1); -object1の処理- array.add(object1); このようにして、object1を配列で管理するイメージです。 object1の処理結果は、毎度変わっています。 しかしこれですと、最後のobject1の処理の内容がすべてのarray(i)に入ってしまいます。 要は、array(i)は全て、同じobject1を参照しているだけ。 object1の変更結果がarray(i)に入っていくというイメージでは無い、ということでしょうか? また、この他でインスタンス化したものを配列で管理できるような方法がございましたら、ご教授いただけると幸いです。m(_ _)m 動的に配列の要素数を変更(要素が追加)ができるようにしたいのです。

    • ベストアンサー
    • Java
  • 配列を用いたリストでは使用されない領域が発生する?

    応用情報技術者試験に絡んだ質問です。 まずは問題をご覧ください: 問題 リストには,配列で実現する場合とポインタで実現する場合とがある。リストを配列で実現した場合の特徴として,適切なものはどれか。ここで,配列を用いたリストは配列に要素を連続して格納することによってリストを構成し,ポインタを用いたリストは要素と次の要素へのポインタを用いることによってリストを構成するものとする。 正解の選択肢はこれ↓: リストにある実際の要素数にかかわらず,リストに入れられる要素の最大個数に対応した領域を確保し,実際には使用されない領域が発生する可能性がある。 解説: 配列で実現するリストの特徴です。配列を用いる場合は最大の要素数を格納できるだけのメモリ領域をあらかじめ確保する必要があります。1,000要素分確保しても実際の格納数が10要素程度だとすると、残りの990要素分のメモリ領域が無駄になってしまいます。 ・・・これって正しいですか? mallocで動的にメモリを確保して配列を作り、後にreallocで要素数を増やすことで無駄のない運用ができるはずです。自分はそれを知っていたので、この選択肢を選びませんでした。「可能性がある」で逃げてますが、それを言うなら、無駄なく使える可能性もあるわけで…。この問題、納得いかないです。 まずはmallocとreallocで動的に確保できることへの回答をお願いします。それから、この問題の妥当性についてお願いします。

  • 要素を選択していくプログラムについて

    配列 a[12]={9,10,11,8,1,2,0,5,4,6,7,3} b[12]={2,0,10,5,8,7,9,11,6,1,3,4} の2つがあった場合、 各配列の初めから両隣の要素をそれぞれ番号ごとのリストに追加します。 この作業をa,bの配列の最後の要素まで繰り返します。 例. (aの配列の初めの要素9の場合→両隣の要素は左側3、右側10なので 9の箇所に3と10を追加する。 次、10の場合→両隣の要素は左側9、右側11なので10の箇所に9と11を追加する。 aの配列の最後の要素3の場合→左側7、右側9なので3の箇所に7と9を追加する。) 作業の結果のリスト 0:{2,5,10} 1:{8,2,6,3} 2:{1,0,4} 3:{7,9,1,4} 4:{5,6,3,2} 5:{0,4,10,8} 6:{4,7,11,1} 7:{6,3,8,9} 8:{11,1,5,7} 9:{3,10,7,11} 10:{9,11,0,5} 11:{10,8,9,6} 以上のようになります。 ここから (1)一番短いリストを選びます。 (ここでは0と2のリストが要素数が3つしかないのでランダムでどちらか選ぶ。 仮に0を選択したとする。) 0→ (2)次に0を選んだので0~11までのリストの中から0を全て消します。 (0を消した事によりリストの長さが変わります。) (3)0の中のリストの中の要素2,5,10を見てこの中でリストの一番短いリストを選びます。 (ここでは2が一番リストが短いので(先ほど0を消したのでリストの長さ2)2を選ぶ。) 0→2→ (4)2を選んだので0~11までのリストの中か2を全て消す。 (5)2の中のリストの中の要素1,4を見てこの中でリストの一番短いリストを選びます。 (ここでは1と4のリストの長さが等しいのでランダムでどちらかを選ぶ。) 0→2→1 (4)に戻り、同様の作業を繰り返します。 0→2→1→8→5→4→6→7→3→9→10→11 最終的に↑のような結果を得たいのですが、色々考えてみたのですが全然できません。 どなたか教えて頂けないでしょうか?(もしくはヒントだけでも頂けたら助かります。) よろしくお願い致します。

  • C言語で、配列の要素を削除したい

    構造体からなる配列において、 データを追加/削除したいのですが、 どうしたらいいのでしょうか? 学校の課題なのですが、問題から読み取る限り リスト構造じゃなくて配列でつくるみたいなのです。。 追加データ数は限られてるので、数はだいじょうぶと 思うのですが、データを消したあと その消した部分をどうやってつめればいいですか?? また、数字を追加/削除した後に数字のならびを ソートして昇順にそろえなければいけないのですが、 バブルソート法では遅いでしょうか? (それしか習ってないのですが) 何かもっと早くできる方法があれば教えていただきたいです。 どうかよろしくお願いします!

  • クラスの中の配列へのアクセス

    お世話になります。 昨日?に似たような質問をさせていただきましたが、またよろしくお願いいたします。 以下のようなクラスがあります。 (自分で動かして確認したいのですが、今確認する環境がないので申し訳ありませんがご回答お待ちしてます) class Class1{   var $list; // 添字が数値のの配列です   …   function getList(){     return $this->list;   } } $a = new Class1; $a->getList()->[0] ↑上のようなやり方で、Class1の$listの配列の1番目(0番目)の要素を取得したいのですが、これは可能なのでしょうか? 何卒よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 配列作成時の区切り文字について

    こんばんは。 perlをはじめて一ヶ月あまりの初心者です。 いま「続・初めてのPerl」という本で勉強しています(オライリーの本です)。 mapの使用例として以下のコードがあるのですが、 理解できず、気になって仕方ない箇所があります(以下のコードです)・・・。 -------------------------------------------------------------- my %provisions = ( 'The Skipper' => [qw(blue_shirt hat jacket preserver sunscreen)], 'The Professor' => [qw(sunscreen water_bottle slide_rule radio)], 'Gilligan' => [qw(red_shirt hat lucky_socks water_bollte)], ); my @remapped_list = map{ [ $_ => $provisions{$_} ]; } keys %provisions; -------------------------------------------------------------- [ $_ => $provisions{$_} ]; の部分で配列へのリファレンスを作っているのですが 要素を区切るのに、どうして「=>」を使うのでしょうか? 配列で要素を格納するときは「,」で区切るのではないでしょうか? @remapped_listのダンプを取ってみましたが、 「=>」ではなくて「,」で区切っても、 メモリの番地や配列の内容はまったく同じ結果になりました。 リファレンスや、無名配列、無名ハッシュは理解しているつもりですが、 知らない用法がまだあるのかな・・・。 もしご存知の方がいらっしゃいましたら、教えていただきたいです。 宜しくお願いします。

    • ベストアンサー
    • Perl
このQ&Aのポイント
  • コンセントの再接続や電源の入れ直しをしても、ブラザーMFC-J6583CDWでエラー48が表示され続けます。インクタンクも全てバツ印表示されています。
  • ご利用の環境はWindowsで、USBケーブルで接続しています。関連するソフト・アプリはありません。電話回線はひかり回線です。
  • ブラザー製品に関する質問です。インクジェットプリンターがエラー48を表示し、印刷ができない状況です。FAQでの解決方法が見つからず、相談したい内容です。
回答を見る

専門家に質問してみよう