• 締切済み

二次元配列のインデックスについて

基礎的な質問かもしれませんが、ネットで調べたのですが、うまく回答が見つからなかったので、教えて下さい。 VB.netで二次元配列を扱っているのですが、この要素はどこにあるのかを知りたいのです。 一次元配列でしたら、Indexof を使えば、どこのインデックスに配置されているかが分かると思うのですが、 二次元配列の場合は、どうすればインデックス数が分かるのでしょうか。 例えば、列は0で固定だけど、どこの行にこの要素が格納されているか分からないから、行番号を知りたいと言うときです。 よろしくお願いいたします。

noname#223023
noname#223023

みんなの回答

回答No.1

直接はないので,LINQ等で代用することになります。 e.g.) Dim arr As Integer(,) = New Integer(,) { {0, 1, 2}, {10, 11, 12} } Dim i1 As Integer = arr.Cast(Of Integer).Select(Function(v, i) New With {v, i}).First(Function(o) o.v = 12).i Debug.WriteLine("{0} / {1}", i1 \ arr.GetLength(1), i1 Mod arr.GetLength(1))

noname#223023
質問者

お礼

Yune-Kichiさん 早速のご回答ありがとうございます! お返事が遅くなって申し訳ございません。 初心者なものでLINQ自体よく分からなかったので、ネットで調べてみたのですが、私の力量では理解が難しく。。(泣 Yune-Kichiさんが教えて下さったコードも初心者の私には難しくて、こちらはどのようなことをされているのでしょうか。 御手数をおかけしまして大変申し訳ございませんが、もう少し詳しく教えて頂けましたら嬉しいです。 よろしくお願いいたします。

関連するQ&A

  • 二次元配列が、勝手に一次元配列になってしまう

    Excelのマクロで、二次元配列を格納したバリアント型を戻り値とする関数を作ったのですが、… 二次元型配列のひとつの要素数が1の時、受け取ったバリアント型変数は、一次元配列になっています。 列ベクトルなら、それもありかな~と思うのですが、なんで、行ベクトルまで、一次元配列にするんだよ~って、困っています。 シートから関数を呼んだ場合は、列ベクトルは列ベクトル、行ベクトルは行ベクトルとして、表示されるので、マクロの中で関数を呼び出した場合も、行列の情報を保持できる方法があるんじゃないかと思ったのですが。 どなたか、ご教示頂けるとありがたいです。 よろしくお願いします。

  • 2次元配列について、教えてください。

    基本的なことなのでしょうがまだよくわかっていません。 ワークシートにたとえると、1次元は縦方向(行番号方向)、二次元は横方向(列番号方向)ですよね? 列数、行数にあたるのが1次元、二次元それぞれの添字ですよね? そしてセルに当たるのが「要素」ですよね? 以上の解釈があっていたら、 1.A列やB列にあたるものはなんと呼ぶのでしょうか? 2.1行目や2行目にあたるのはなんと呼びますか? 3.ワークシートで行や列を削除するような感じで2次元配列の行や列にあたるものを削除することはできますか? 4.UBound関数は、配列の大きさを調べられますが、この大きさは添字です。ワークシートのCells(65536,1).End(xlUp)Rowのように実際にデータがどこまで入っているか調べられますか? 教えてください。 前提とした解釈自体が違っていたらそれもご指摘ください。

  • ReDimを使用した二次元配列

    全レコードが不明のファイルから、レコードを読み込んで分割し二次元配列に格納したいのですが、項目(列)数は確定しています。この場合は、どうすればレコード(行)数を動的に変更していく事が出来るのでしょうか? ヘルプを見ても、ReDim x(行, 列)だったら、列しか変更出来ないように書いてあって困っています。 どなたか、御教授をお願いします。

  • C# 多次元配列の要素数の変更

    現在、C#2005にて開発を行っているものです。 最近C#を始めたばかりで、分からないことだらけです。 以前はVBで開発を行っており、配列の要素数を変更することなど容易だと思っていたのですが、そう簡単にはいかなそうです。 VBではRedimがあったのですが、C#にはRedimがありません。 そこでネット等で調べてみたところ、Array.Resizeで配列の要素数が変更できることがわかりました。 ですが、1次元配列にしか対応されていない気がします。 現在開発しているシステムでは明細データの履歴情報を登録する部分を担当しています。配列A[変更前又は変更後,明細(行)No.,列No.](3次元配列)を使用して変更前と変更後の明細データを比較しております。 呼び出した明細データの明細行数分のみ(なので可変です)、配列Aの要素数を変更していきたいのですが、どなたかご教授頂けませんでしょうか。 大変お手数をお掛け致しますが、よろしくお願い致します。

  • 多次元配列の行列

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

  • ポインタと多次元配列についての質問です

    私の使っている本に、 『ポインタを使って多次元配列にアクセスするには、コンパイラが自動で行っていることを手作業で 行わなければなりません。たとえば、次の配列には各列に5つの要素があります。 float balance[10][5]; したがって、ポインタを使ってbalance[3][1]にアクセスするには、次のようなコードを使用 しなければなりません。 float *p; p = (float *) balance; *(p + (3*5) +1) 目的の要素に到達するには、行番号に行の要素数を掛けてから、その要素の行内での番号を 加えなければなりません。上記の例では、balanceをfloat* にキャストする必要がありました。 配列要素を手作業で指定する都合上、ポインタ演算をfloatポインタに基づいて行わなければなりません。 しかし、balanceによって生成されるポインタの型はfloatの2次元配列です。そこでキャストが 必要になるわけです。』 とあります。 【質問1】なぜ、p = (float *) balance; なのか。p = (float) *balance; ではないのか? 【質問2】本文「上記の例では………必要になるわけです。」の意味がわかりません。 未熟者の私ですがどうか教えてください。

  • C#での動的配列作成方法について

    はじめまして、 現在ASP.NET、C#で開発をしております。 そこで、質問です。 C#で二次元配列を作成し、データを格納します。 二次元配列は宣言時はサイズがわかってません。 ループで回った回数分、最初(第一要素数)の要素数が決定します。 二つ目の要素数の数は最初からきまっています(固定用素数)。 string[][] string[,] arraylist などがあると思いますが、上記の場合どういう風に配列を作成していったらいいのでしょうか? 動的にサイズを変更できる配列の作り方、データ格納方法、データ表示方法を教えてください。 よろしくお願いします。

  • 二次元配列で"一列"取り出すには?

    すいませんC# を勉強中なのですが、 たとえば int[,] a = new int[2,2] {            {1,2},            {3,4}         } という2x2の二次元配列があったとき 縦の列、つまり1と3だけ抜き取って配列に格納したい、または2と4だけを抜き取って配列に格納するにはどうすればいいでしょうか? 実際には配列に抜き取った後に hairetsu.Max(); でその列の最大値を出したいと考えています。 たくさん量があるとき、どうすれば簡単に列の配列を抜きとれるのでしょうか、ご存じの方よろしくお願いします…

  • C++ vectorに配列をプッシュしたい

    C++のstd::vectorが格納する要素として配列を指定することはできますか vectorを使って2次元配列を表現したいときは,たとえば std::vecor<std::vector<int>> v; とすれば2次元配列が表現できますよね. 2次元配列の列方向の要素数が2で固定されていて,行方向の要素数が不確定のデータを扱いたいので,2次元配列を格納するvectorで扱えればなと思いました. (2個で1組のデータがたくさんあるということなので,vectorの2次元配列ではありません) std::vector<int[2]> v; int a[2]; a[1] = 1; a[0] = 2; v.push_back(a); という書き方ではコンパイルできなかったのですが,vectorに配列要素を格納させることはできないのでしょうか. あるいは,もし可能ならどのように書けばよいのでしょうか. 結局は1組のデータセットを構造体化してそれをvectorにプッシュするやり方に落ち着いたのですが,疑問に思ったままモヤモヤしているので質問させて頂きます. 「vector 配列」などのキーワードで検索してみましたが,vectorの動的配列としての紹介記事が多くヒットしてしまい,自分ではうまく情報を発見することはできませんでした. よろしくお願いします.

  • textboxの二次元配列で質問

    textboxの二次元配列で質問 Visual Web Developer 2008を使いWebアプリケーションの入力フォームを開発中です。言語はVBです。  複数行のtextboxに入力された文字を連結する方法が分かりません。ネットでいろいろ検索して二次元配列をすれば可能なようですが、分かりやすく書いてあるサイトが見つからず、苦戦しています。列数は10列。行数は50行ぐらいあります。 ↓(サンプル)  例えば、下のような入力フォームのtextboxにあ・い・う・え・お・か・き……と入力された文字列で、buttonをクリックしたら「あいうえおかきくけこ…」と文字列の連結した実行結果を出したい場合です。       列   あ|い|う|え|お| | |   か|き|く|け|こ| | | 行 さ|し|す|せ|そ| | |   た|ち|つ|て|と| | |   な|に|ぬ|ね|の| | |    | | | | | | |    | | | | | | |    textboxが多いので、二次元配列と繰り返し処理(文字がなくなるまで繰り返す)を使って、簡単にできないでしょうか? 初心者なので分かりづらい質問で申し訳ありません。 参考になるページやコードがあったら教えて下さい。 よろしくお願いします。

専門家に質問してみよう