• ベストアンサー

C#かJavaで、配列の中から別の配列を探し出す

お世話になります。 C#かJava(CやC++は入れない)で、特定の配列の中に、該当する 配列があるかどうかを調べるメソッドがあれば、教えてください。 例えば… int[] a={0,0,0,1,2,3,4,5,6,7}; int[] b={3,4,5}; ならば、『5』が返ってくるなどです。 力技では、aの配列を順にみていき、bの一番目と同じなら、 お互いの配列の次の要素を比較…などとやっていくのですが、 これらの方法を、標準のメソッドがあれば…と思い、 質問させていただきました。 以上、よろしくお願いいたします。

  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • teketon
  • ベストアンサー率65% (141/215)
回答No.1

Javaだけの話です。(以下、indexはbの添字) int型配列aに含まれるint型配列bの要素の先頭の添字だけ欲しい場合 Arrays.binarySearch(a,b[index]); int型配列aに含まれるint型配列bの要素の全添字欲しい場合 Arrays.binarySearch(a,from,to,b[index]);//from,toは配列aの走査対象要素 配列がオブジェクト型でもいいなら、Listを実装したクラス(ArrayListなど)に放り込みます。 オブジェクト型配列aに含まれるオブジェクト型配列bの要素があるか否か listA.contains(b[index]); オブジェクト型配列aに含まれるオブジェクト型配列bの要素の先頭の添字だけ欲しい場合 listA.indexOf(b[index]); オブジェクト型配列aに含まれるオブジェクト型配列bの要素の最後の添字だけ欲しい場合 listA.lastIndexOf(b[index]); 最初に見つかる添字だけ欲しいなら標準ライブラリで取得できますが、 全添字が欲しいとなると途端に泥臭くなります。

tatapatank
質問者

お礼

ありがとうございました。 …C#ではないのでしょうか…。

関連するQ&A

  • Eclipse による Java プログラミングの配列について質問です

    Eclipse による Java プログラミングの配列について質問です。 下の二つの問題に対して、それぞれのソースコードを教えてください。よろしくお願いします。 1. int型配列aの要素の中で,正の値だけを順に配列bの要素に 代入して,その結果を表示するプログラムを作成しなさい. ※配列aの要素と配列bの要素をそれぞれ表示すること. (実行例) 配列a={5 -1 3 4 -2 7} 配列b={5 3 4 7} 2. int型配列dataの要素の中で,最大値と何番目の配列の要素が 最大値か表示するプログラムを作成しなさい. ※配列dataの要素も表示すること. (実行例) 配列data={31 41 59 26 53 58 37 97 93 23 84} 最大値は97です 最大値は7番目の配列の要素です

    • ベストアンサー
    • Java
  • javaの配列

    javaの配列なんですが、配列の全要素一気にメソッドを実行させることができますか? 例えば、 Turtle[] hm = new Turtle[3]; for(int i = 0; i < 3; i++){ hm[i] = new Turtle(); } と配列を生成し、fd(int s)←[sピクセル前進]というメソッドを配列の全部の要素を順番ごとにではなく全部同時に実行させたい場合、コードはどのように書けばよいのでしょうか?

    • ベストアンサー
    • Java
  • 配列の要素追加・・・

    プログラミングというものは結構やっていて最近Java・iアプリを作っているものです。 質問なんですが、プログラムが進行すると要素が増える~みたいなプログラムで ーーーーーーーーーー int[] a;//みたいな感じで起動。 ・・・ a[b]=0;//b番目の要素(int)をいきなり追加記述... ーーーーーーーーーー 上の様にするとエラーなようです。 配列の要素の追加について、あんまりいいサイトも見つからなかったので、教えてください。

    • ベストアンサー
    • Java
  • C♯の配列について

    C♯でプログラムを作っているのですが、配列の要素数の最大値と最小値の求め方がわかりません。配列の値の最大値の求め方は調べれば出てくるのですが、要素数の最大値等は調べてもわかりませんでした。 例えば下記のような配列があった場合 int[,,] a =new int[100,100,100] a[2,3,6]=1 a[4,5,9]=1 a[13,46,79]=1 a[8,15,45]=1 a[1,33,68]=1 それぞれの要素数の最小値1、3、6、最大値13、46、79は どのようにプログラムで求めればいいのでしょうか? よろしくお願いします。

  • JAVAについて(配列)

    現在JAVAの配列を勉強しています^^ 問題集の勉強をしてて、気になる事があったので、どなたかわかる方宜しくお願いします☆ 要素数11個の配列があります。 10個には同じ数字が入っています。 1個だけ他の数字より大きい数字が入っています。 ただし、配列の何番目に、その数字が入っているのかは解りません。 それが、配列の何番目に入っているのかを出力するプログラムを作成してください。 ※for 文使用しないパターン ヒント: ここに天秤と、 11個の重りがあります。 1つだけ他のより重いです。 他はみんな、同じ重さです。 (2分木) 私が考えるには、全体の平均値を比較していく考えなのですが、他によい方法があれば宜しくお願い致します。 ちなみに今作成途中のもの↓ 実行しても表示されません・・・なぜかわかりません・・・ わかる方・・・助けて下さい^^ public static void main(String[] args) { int[]a = new int[11]; a[0] =1; a[1] =1; a[2] =1; a[3] =1; a[4] =2; a[5] =1; a[6] =1; a[7] =1; a[8] =1; a[9] =1; a[10] =1; int max = a[0]; int sum = a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]+a[10]; int avg = sum/11; if(avg<a[0]) System.out.println("最大値は"+max+"番目"); } }

  • [C言語] 配列が添字の意味を失う理由

    はじめまして。こんばんは。 早速ですが、下記のソースコードは、 配列aの各要素の内容を先頭から順に調べ、最初に0であった要素の添字番号を表示する。 という内容の、C言語のプログラムです。(C++でコンパイルするためmain()はint型に指定) そこで、このプログラムを実行していて腑に落ちない点として、 プログラムの挙動を見る限り、 タイトルに書いたとおり、 「配列が添字の意味を失っている」という事なんです。 普通に配列の添字と考えれば、 while文の条件式は、 int i=0; while(a[i]) { i++; } なので、a[0]になるはずなので、 普通に考えれば 条件式の中身としては  配列a[0] が 配列a[0] になるまでi++をするとなるはずです。 しかしながら、このプログラムは、 初期値に「0」が入っている要素まで探し続けます。 なぜ、 「配列が添字の意味を失うのか?」 どなたか、この疑問にお答えしていただけますと幸いです。 「プログラムの内容」 配列aの各要素の内容を先頭から順に調べ、最初に0であった要素の添字番号を表示する。 「表示結果」 a[2]= 0 「ソースコード」 #include<stdio.h> int main() { int a[]={3,0,7,8,5,5,8}; int i=0; while(a[i]) { i++; } printf("a[%2d]=%2d \n",i,a[i]); }

  • C の配列

    C で、配列 char a[8]; int b[8]; をメモリの連続した領域に配置し、 a[8] とすれば b[0] がアクセスできるようにしたいのですが可能でしょうか。

  • 配列について(C言語)

    配列の要素において一番目の要素以外を0にするプログラムを以下のように作成したのですが(while文を*b != 0という条件で作りたい)、while文内のところが間違っているためだと思われるのですが、うまく実行されません(実行しても何も表示されない)。どのようにしたらいいのでしょうか。または、何かが抜けている、ほかの部分が間違っている等もあるためにうまく実行されないということなのでしょうか。 #include <stdio.h> int main(void) { int a[5] = {5, 78, 2, 9, 0}; int i, *b; b = &a[0]; while (*b != 0){ if(*!=a[0]) *ptr=0; else *ptr=a[0]; } for (i = 0; i < 5; i++){ printf("ptr値 =%d ptrアドレス =%p \n", *ptr, ptr); } printf("\n"); return (0); }

  • Javaのプログラムが完成出来ません・・・

    この前、大学からこんな課題が出されました。 以下の条件が含まれてるシェルソートのプログラムを作成せよ。 条件。 ・ソート済み部分に新しい値を挿入するための空き場所を作るメソッドを入れること。 ・配列の逆順数を計算するメソッドを入れる。 ・今の歩幅より一段階小さい歩幅を計算するメソッドを入れる。 ・配列の大きさに一番合った歩幅を計算するメソッドを入れる。 ・歩幅hの挿入ソートを行うメソッドを入れる。 ・シェルソートを行うメソッドを入れる。 ・mainメソッドを完成させ、ソート過程を表示しながらシェルソートを実行するようにする。 ・作成したプログラムが正しく選択ソートを実行していることが分かる実行結果を示すこと。 ・値は、 a[0]=0, a[1]=30, a[2]=20,a[3]=10 一応プログラムは、 class ShellSort{ static int compare = 0; static int copy = 0; static void showArray(int a[], int N){ //2-0:逆順数と共に配列の内容を表示するメソッド //動作:N個の要素を持つ配列aの要素を全て画面に表示する //} static void initArray(int a[], int N){ //2-0:配列にランダムな値を代入するメソッド //動作:N個の要素を持つ配列aに対し、1~Nまでの範囲の数をランダムに入れる //ただし、a[0]には常に0を入れること。 } static int shiftLargerElements(int a[], int v, int i){ //2-0:ソート済み部分に新しい値を挿入するための空き場所を // 作るメソッド //動作:配列aに対し、a[i]より手前にあるvより大きい要素を後ろ //に1つずつずらしてvを挿入するための空き場所を作る。最後に、 //できた空き場所の添え字を戻り値として返す。 //空き場所を作るまでに行った比較回数を変数compareに加算 //空き場所を作るまでに行ったコピー回数を変数copyに加算      int space = 0; int j; j = i; while((compare++ >= 0) && (a[j-1] > v)){ a[j] = a[j-1]; copy++; j--; } space = j; return space; } static int shiftLargerElements(int a[], int v, int i, int h) { //2-1:ソート済み部分に新しい値を挿入するための空き場所を // 作るメソッド //動作:配列aに対し、a[i]より手前にある要素 //a[i-h],a[i-2h],a[i-3h],...のうち、vより大きい各要素を後ろに //hだけ移動させてvを挿入するための空き場所を作る。 //最後に、できた空き場所の添え字を戻り値として返す。 //空き場所を作るまでに行った比較回数を変数compareに加算 //空き場所を作るまでに行ったコピー回数を変数copyに加算 int space = 0; return space; } 現在はここまでしか作成出来てません。 それ以降でつまづいています。 分かる人がいましたら、是非教えて下さい。

  • 配列から別の配列の要素を削除する方法

    ある配列array_aに、100件の文字列要素が格納されています。 別の配列array_bには、80件の文字列要素が格納されています。 array_aの要素、array_bの要素共に重複するものはありません。 array_b中に存在する要素はすべてarray_a中にも存在します。 array_aにあり、array_bにはない要素で構成されたarray_cの作り方を教えてください。 例えば $array_a=array("a","b","c","d","e","f","g"); $array_b=array("e","b","d"); なら、 $array_c=array("a","c","f","g") になります。 配列array_aとarray_bは、 $array_b=array("b","b","d"); であったり、 $array_a=array("a","a","b","c","d","e","f","g"); といった「重複する要素を含むパターン」はありません。要素はすべてユニークです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう