• 締切済み

array.indexof と array.laseindexofについて

dim x() as integer = new integer(7) {1,5,7,9,11,5,9,2} で、 array.indexof(x,9,4)はなぜ6がかえるのでしょうか。 lastindexofの場合は3がかえります。 また、array.lastindexof(x,5,4,3)は-1がかえされます。 なぜでしょうか。 すみませんが、教えてください。。。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

IndexOfは順方向に検索します パラメータ startIndexが0より大きい場合は渡された配列の startIndex以降を検索します したがって IndexOf( x, 9, 4 )と指示すると 配列xの5番目以降が検索対象になります ... 11,5,9,2 x(4)の11以降で検索するので見つかるのが x(6)の9となります LastIndexOfは逆方向に検索します つまり渡された配列の末尾から先頭に向かって検索するのです LastIndexOf( x, 9, 4 )と指示した場合 配列xの5番目以前が検索の対象になります ... 1,5,7,9,11 したがって x(3)の9が見つかるのです LastIndexOf(x,5,4,3)と指示すると 配列xの5番目の要素から3要素が検索対象になります つまり 7,9,11 の3要素です この中に 検索する『5』が存在しないので -1が結果となります

lotus123
質問者

お礼

明快な回答ありがとうございます。 大変よく分かりました。 ありがとうございました。

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

関連するQ&A

  • Arrayについて

    Dim ar(1 To 6) As Integer Dim i As Integer for i = 1 to 6 ar(i) = i + 1 Next というソースがあり、作成された ar(2,3,4,5,6,7)という配列を、 Array(2,3,4,5,6,7)のようにArray()の中に入れたいのですが上手くいきません。どのようにしたら良いでしょうか? Array(ar)としても駄目でした。

  • VB.NET parallel arrayからの取り出し方

    VB.NET 初心者ですのでお手やわらかにお願いいたします。 今週の売利上げを各商品ごとにTextboxへInputします。それをSortして一番売り上げ数の高い数字とその商品名をLabelHighNumberとLabeItemlNameに出します。分かりやすいように3商品と簡単な数字を使いますのでご了承ください。input数字はすでにToInt32でConvertしてあるもとします。どうもこれでは、Sort後、売り上げ個数の高い18だけ引っ張ってきてOrangeがでてきません。Arrayの中で二つがつながってないんでしょうか。 商品名はすでにLabelでscreenにでていますので、売り上げ個数だけのInputになります。 このようなイメージです。 Apple 10 Banana 5 Orange 18 Dim strItemName() as string {"Apple", "Banana","orange"} Dim intInputProductNumber() as integer {10, 5, 18}  Dim intIndexLocaion as integer ’一番高いIndexをとるためSortしました Array.Sort(inInputProductNumber) 'ここでIndexが一番大きい2をとりました。(0,1,2の中で) intIndexLocation = inputProductNumber (2) 'ここでは18と出てきます。 me.LabelHighNumber.text = indIndexLocation.toString ’しかし、Orangeとはでてきません。 me.LabelItemName.text = strProductName(intIndexLocation) よろしくご教示お願いいたします。

  • 技術用語の翻訳

    英文マニュアルの翻訳を手伝っているのですが、専門家が日本語でどのように言うのか分からずに困っています。 プログラミングの「配列パラメータ」の説明で、 'Following used only for array parameters 'Range of array rows Dim IMAX as Integer 'Range of array cols Dim JMAX as Integer 'Range of array planes Dim KMAX as Integer 'Range of array books Dim LMAX as Integer 'Range of array shelfs Dim MMAX as Integer という部分があり、注釈行の「rows」や「cols」はそれぞれ「列」「行」と訳すのだろうな(逆でしょうか?)と想像は付くのですが、3次元以上の配列の場合、「planes」「books」「shelfs」は本当にそのまま「面」「本」「棚」と訳して通じるのだろうか? と、悩んでいます。 数学分野で教えていただけるかと一度質問をしたのですが、聞きたい内容を理解していただけるようにうまく質問できなかったため、改めてこちらで伺います。 よろしくお願いいたします。

  • EXCEL VBAで Arrayの使い方が判りません

    あらかじめ、セル上にシート名を入れておき、 Arrayでシートを指定したいのですが、 うまく行きません 内容 Sub Macro2()    'Cells(2, 2) に 「"Sheet1","Sheet3","Sheet6"」   と入力されています   Dim hani As String   Dim hani2 As Variant   hani = Cells(2, 2)    hani2 = Array(hani) '下記がエラーになります   Sheets(hani2).Select   Sheets(hani2).Copy '以下略 End Sub 1)セル上にあらかじめ、配列の中身を入力しておく 2)その値を取得後、arrayでシートを指定する この2件はどうしても避けられないのです

  • 初期データの書き方

    PHPのように初期データを行を変えて書くことはできるでしょうか? $a = Array( 0, 0, 0, 0, 0, 0, ); dim a() as integer redim a(5) a = array(0,0,0,0,0,0) でも良いのですが、長いデータの場合限っては最初のように書きたいです。

  • VB2005での関数への配列の参照渡しの方法

    Visual Basic 2005で、 =============================================================== Function func(ByVal a As Integer, ByRef b() As Integer) As Integer  a += 1 : b(0) = 1 : b(1) = 2 : b(2) = 3 Return 0 End Function ============================================================== という関数があったとしてメインのプロシージャに ================================================================ Dim c As Integer Dim d As Integer Dim e() As Integer = Array.CreateInstance(GetType(Integer), 10) d=7 c = func(d, e) ================================================================ と書き入れると結果はd=7(∵値渡し)、e(0)=1,e(1)=0,e(2)=0(∵参照渡し)となってしまうと思います。 e(0)=1,e(1)=2,e(2)=3としたい場合はどのように記述すればよいのでしょうか?

  • VB2005 初心者です。

    文書中の番号を振りなおしたいのですが、やり方がよく分かりません。 Dim a As String=textbox1.text Dim b As Integer=a.IndexOf("【作品番号") Dim c As String=a.Substring(b,5) Dim d As Integer=c.Length Do While b <> -1 b=a.Indexof("【作品番号",b+1) d=d+5 Loop Dim f As Integer=Cstr((d-5)/5) Dim g As Integer=0 g=g+1 For h As Integer=1 To f Dim i As String=textbox1.text.Replace("【作品番号","【作品番号" & h & "】") Next 最初のループまでで文章中に【作品番号*】がいくつあるかを調べて、(f回)その回数文だけまたループを回して番号を振りたいのですが、何もおきません。 本当に初心者なので、皆さんが見たらありえない構文かも知れませんが、ご教授願います。。。 ちなみに、作品番号は2桁3桁にもなることもあり、全角の数字にしたいのです。 よろしくお願い致します。

  • SetとNothingの存在意味?

    数値とオブジェクトの変数セットはそれぞれ、 Dim num as integer num = 5 Dim obj as Object set obj = new From set obj = Nothing ですが、 オブジェクトの場合でインスタンスを生成しない、単なる参照?別名? の場合はNothingは不要でしょうか? Dim obj as Object For x = 1 to 10 set obj = Form2 ' newとインスタンスを生成するのではなく、単なる参照  obj.Caption = str(x) & "回目" 'set obj = nothingは不要? Next x

  • arrayの中にarrayをほぞんすることはできますか?

    String[] a = new String[10]; でstirng 保管するarrayができると思うのですが、 arrayのなかにほかのarrayを保管することは可能でしょうか? そのとき、どのようにイニシャライズすればよいのでしょうか? よろしくおねがいします。

    • ベストアンサー
    • Java
  • arrayである値を持った要素のみを削除するすっきりした方法。

    PHP4で,ある値を持った要素のみを削除したarrayをかえしたいのですが,たとえば,[d]と[e]をいう値をもった要素を削除したい場合, $a = array("a", "b", "c", "d", "e"); $eraseitem = array("d", "e"); $new_a = array(); foreach($a as $value); { if (!in_array($value, $erasesitem)) { $new_a[] = $value; } } とすれば,削除できますが,ほかに何かいい方法はないでしょうか。(デフォルトの関数などを使用してすっきりとできないのでしょうか。) 詳しい方,よろしくお願いします。

    • ベストアンサー
    • PHP