• ベストアンサー

.NET Framework(VC++)のクラスで、intの配列をソートするメソッドありますか?

.NET Frameworkのクラスで、intの配列をソートするものは存在しますか? ちなみにVC++になります。 唯一ソート機能があると見られるArray.Sortは、Arrayに文字列しか登録できず、数字を純粋に扱えるものがマニュアルに見当たりません。 もし、ご存知の方、お教えいただけますと幸いです。

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

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

# 質問文中に開発環境や実行環境の情報ももりこみましょう .NET Framework 1.1(1.0)ならば int _tmain() {   int src[] = { 20, 5, 2, 18, 15 };   Int32 ar[] = __gc new Int32[sizeof( src ) / sizeof( src[0]) ];   Console::WriteLine( "Before Sort" );   for( int n = 0; n < ar->Length; n++ ) {     ar[n] = src[n];     Console::Write( n.ToString()->PadRight(2) );     Console::WriteLine( ar[n] );   }   Array::Sort( ar );   Console::WriteLine( "After Sort" );   for( int n = 0; n < ar->Length; n++ ) {     Console::Write( n.ToString()->PadRight(2) );     Console::WriteLine( ar[n] );   }   return 0; } といった具合でいいのでは ... # VC.NET2003 or VC2005(/clr:oldSyntax) にて確認

noname#86052
質問者

お礼

ご解答誠に有難うございました。 ご指摘感謝いたします。 仰るとおり、環境の違いはコーディング上、致命的な違いがありますね。 以後、気をつけます。 Int32型を使えば、Arrayが使用できるのですね! Int32を自分で試した限り、__gcの使い方が間違っていたためエラーになり、使えないものと勝手に結論つけておりました。 ちゃんとした文法をお教えくださり本当に助かりました。 VC++はマニュアルに載っていない使い方がたくさんあるみたいですね。 注意しながら使いたいと思います。

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

その他の回答 (1)

回答No.1

普通にArray.Sortが使えますが。 お試し。 using namespace System; int main(void) { array<int>^ arr = gcnew array<int>(3); arr[0] = 2; arr[1] = 5; arr[2] = 3; Array::Sort(arr); for (int i = 0; i < arr->Length; ++i){ Console::WriteLine("{0} = {1}", i, arr[i]); } return 0; } 結果 0 = 2 1 = 3 2 = 5

参考URL:
http://msdn.microsoft.com/ja-jp/library/kwx6zbd4(VS.80).aspx
noname#86052
質問者

お礼

ご解答有難うございます! 残念ながら、VC2005より古い環境ですので、ご提示くださったgcnewなどが使えないみたいです…(涙) とても参考になりました。

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

関連するQ&A

  • 多次元配列のソートがうまくいかない

    多次元配列のソートがうまくいかない 質問失礼します. 以下のような,String型,int型,double型の混在した多次元配列([3][3]の配列)をソートするプログラムを作成しました. このプログラムでは3番目の項目でソートを行っています. 問題点なのですが, 3番目の項目がdouble型の一桁(例えばarray[1][2]が2.0)ならばうまくソートできるのですが, 一つを2桁(例えばarray[1][2]を10.0)にすると何故か先頭の数(10.0の場合1)を基準にソートされてしまっているようです・・・ 配列へのデータの入れ方が間違っているのでしょうか? 原因がはっきりわからず困っているのですが, わかる方いましたらよろしくお願いします. public class Sort_test { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ String[][] array = new String[3][3]; array[ 0 ][ 0 ] = "A"; array[ 0 ][ 1 ] = 2001+""; array[ 0 ][ 2 ] = 9.0+""; array[ 1 ][ 0 ] = "B"; array[ 1 ][ 1 ] = 1001+""; array[ 1 ][ 2 ] = 2.0+""; array[ 2 ][ 0 ] = "C"; array[ 2 ][ 1 ] = 3001+""; array[ 2 ][ 2 ] = 6.0+""; TheComparator comparator = new TheComparator(); // 3番目の項目でソートするように設定 comparator.setIndex( 2 ); // ソート実施 Arrays.sort( array, comparator ); dump(array); } public static void dump( String[][] array ) { for ( int i = 0;i < array.length;i++ ) { for ( int j = 0; j < array[ i ].length;j++ ) { System.out.print( "\t" + array[ i ][ j ] ); } System.out.println(); } } } //多次元配列ソート用クラス class TheComparator implements Comparator { /** ソート対象のカラムの位置 */ private int index = 0; /** ソートするためのカラム位置をセット */ public void setIndex( int index ) { this.index = index; } public int compare( Object a, Object b ) { String[] strA = ( String[] ) a; String[] strB = ( String[] ) b; return ( strA[ index ].compareTo( strB[ index ] ) ); } }

    • ベストアンサー
    • Java
  • 連想配列のソート

    次のような連想配列があります。 $buff[0][0]=1; $buff[0][1]=567; $buff[0][2]=134; $buff[0][3]="文字列"; $buff[1][0]=2; $buff[1][1]=246; $buff[1][2]=537; $buff[1][3]="文字列"; $buff[2][0]=3; $buff[2][1]=897; $buff[2][2]=334; $buff[2][3]="文字列"; ~ 要するに キー,数字,数字,文字列 が並んでいて、キーと値を保持したまま真ん中の数字二つを使ってソートしたいのですが、どのようにすればいいでしょうか。 asort($buff[1], SORT_NUMERIC); reset ($buff[2]); asort($buff[2], SORT_NUMERIC); reset ($buff[2]); のように試してみたのですが、まったく並びは変わりませんでした。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 連想配列のソートについて

    調べても分からなかったので質問させてください。 現在アクセスログ集計ツールを作成中です。 決められたurlのページにアクセスがあった時にDB登録し、カウントする単純な仕組みで、ツールの方では日にちを任意で選択してもらいエクセル出力する仕組みです。 質問させていただきたいのが、カウントをするページが例えば4ページあり、そのページ名の接頭を取って「date」「index」「login」「stock」「option」というキーの連想配列を作っています。 array(5) { ["date"]=> array(3) { [0]=> string(10) "2015/02/01" [1]=> string(10) "2015/02/02" [2]=> string(5) "total" } ["Index"]=> array(3) { [0]=> int(2) [1]=> int(4) [2]=> int(6) } ["Login"]=> array(3) { [0]=> int(6) [1]=> int(6) [2]=> int(12) } ["Stock"]=> array(3) { [0]=> int(3) [1]=> int(4) [2]=> int(7) } ["option"]=> array(3) { [0]=> int(2) [1]=> int(1) [2]=> int(3) } } このキーである「index」「login」「stock」「option」の順番が取得するデータによって入れ替わってしまいます。 理想的な順番としては「login」「index」「option」「stock」の順番にソートしたいのですが、調べても分かりませんでした。sort関数はアルファベット順とか、数値順とか決まったルールのソートができるようですが、こちらで意図的に順番を操作する事はできるのでしょうか? もしあれば教えていただきたいです、何卒よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 配列のソートがしたい

    sort関数等調べたのですがうまくできません。 やりたいことは http://q.hatena.ne.jp/1155090363 ↑で見つけた事とそっくりなのですが・・・。 ------------------------------------------- arrItem[n] という配列の一つの要素の中に、 タブで区切られた10個程のデータが入っています。 arrItem[0] = "5 ^ 店名5 ^ 品名5 ^ 価格5 ^ 割引額5 ^・・・^ 備考5" arrItem[1] = "2 ^ 店名2 ^ 品名2 ^ 価格2 ^ 割引額2 ^・・・^ 備考2" arrItem[2] = "11 ^ 店名9 ^ 品名9 ^ 価格9 ^ 割引額9 ^・・・^ 備考9" 一列目はSEQ番号でユニークですが、順番が並んでいません。 この配列をSEQ番号で並べ替えたいのですが、 sortだと文字列比較のためか桁数の違う数字の並べ替えが 上手くできません。数値としてのソート方法 が分かる方いらっしゃいましたらご教授願います。 もし可能なら、1列目を数値降順にしたり昇順にしたり、 また2列目を五十音順にソートしたり、 また4列目を価格の安い順にソートしたり と応用も可能ならばご教授願いたいです。 宜しくお願い致します。

  • 配列をソートしたいです

    配列をソートしたいです ArrayクラスのsortOn()を使って、 「x座標の大きい順」に順番をならべ変えたいのですが 上手く行きません。。 現在、配列を使い 3つの矩形のSpriteを配置しています。 ↓現在のコード ===================================== var arr:Array = new Array(); for(var i:int=0; i<3; i++){  arr[i] = new Sprite();  with(arr[i].graphics){   beginFill(0x666666);   drawRect(0,0,8,8);   endFill();  }  arr[i].x = i*10;  addChild(arr[i]); } ===================================== 今、各Spriteのxプロパティは  arr[0].x = 0;  arr[1].x = 10;  arr[2].x = 20; になっているのですが、 これをソートして  arr[0].x = 20;  arr[1].x = 10;  arr[2].x = 0; にならべ変えたいのですが、 どのように書けばいいのかがわかりません。。 今、このように書いてるのですが arr.sortOn(arr.x, Array.NUMERIC); 並べ替えができません、 (おそらく arr.x が駄目なのだと思うのですが。。) どなたかご存知の方いらっしゃいましたら どうかよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 配列のソートと削除

    String型のstrToRemoveで与えられた文字列を配列から探し、あればそれ以降の配列の数字をすべて左にシフトします。 なので配列の大きさは1小さくなります。その結果の配列をreturnで返します。 例) ({"A","B","C","D","B"}, "B")配列1にBがあるのでそれ以降の文字列をすべて左にシフト→ {"A","C","D","B"} ({"A","B","C","D","B"}, "A") 配列0にAがあるのでそれ以降の文字列を左にシフト→ {"B","C","D","B"} プログラムは以下のように組みました。 public class ArrayFun { public String[] oneRemoved(String[] array, String strToRemove) { int count = 0; for (int i = 0; i < array.length; i++) {      if (strToRemove.equals(array[i]) && count == 0) {        for (int j = i; j < array.length - 1; j++) {          array[j] = array[j + 1];        }          count++;      } }      array = new String[array.length - 1];      array[array.length - 1] = null;      return array; } } ちなみにcountは、一度シフトすればもう同じ文字列がそれ以降の配列にあってもシフトはしないので、countでシフトしたかどうかを判断しようと思い付けました。 これでテストメソッドも作るのですが、 import static org.junit.Assert.*; import org.junit.Test; public class ArrayFunTest { @Test public void testoneRemoved() { ArrayFun af = new ArrayFun(); String[] a1 = {"A","B","C","D","B" };//元の配列 String[] a2 = {"A","BB","CCC","DDD","B"};//元の配列 String[] a3 = {"B","C","D","B"};//シフト後の配列 String[] a4 = {"A","BB","CCC","DDD","B"};//シフト後の配列 assertEquals(a3, af.oneRemoved(a1, "A")); assertEquals(a4, af.oneRemoved(a2, "NotHere")); } } 以上のように組むと、assertEqualsの真ん中に黒線が入って自動的に@SuppressWarnings("deprecation")が加えられてしまいます。 実行結果は、({"A","B","C","D","B"}, "A") の例だと、配列0にB が入るはずがnullになっている、とエラーがでます。 どのようにしたら正常に動かせるでしょうか?宜しくお願いします。

    • ベストアンサー
    • Java
  • Rubyで配列をソートする

    15(tab)5634(改行) 24(tab)4446(改行) 24(tab)8357(改行) 24(tab)3287(改行) 56(tab)5465(改行) 56(tab)1324(改行) 56(tab)7544(改行) 上記のように1行にtabで区切られた2つの数値が並んでいるテキストファイルがあります。 このファイルを、Rubyを使って1列目が同じ数字の行ごとにソートしたいのですが、できなくて困っています。 上の例でしたら、1列目が24の3行を2列目の数値をキーとしてソート、1列目が56の3行を2列目の数値をキーとしてソートするということです。 一行ずつ読み込んで、array = line.split(/\t/)でタブでくぎって配列に格納するスクリプトを書いていたのですが、どうしてもできないので、力を貸していただけないでしょうか。 よろしくお願いします。

  • c言語 配列 や ソート datファイル読み込みについて

    初投稿でC言語初心者なのでよろしくお願いします。 課題でdatファイルから100万個の数字を読み込んで、ソートのタイムを競うのがでました。 ソートのアルゴリズム等は分かるのですが、100万個の数字を読み込むのがわかりません。 datファイルには、縦にずらっと数字が並べられていてどこを区切り文字としてとりだすのとか。 int配列も100万個も格納できないので3次元配列つかうのかなと思ってみたりしてます。 どうやって格納すればソートで使いやすいかご教授お願いいたします。

  • 2つの配列のソート

    配列のソートについての質問です。 よろしくお願いします。 var syouhin = new Array(10); //商品名 var kosuu = new Array(10);  //商品個数 syouhin[0] = "apple"; syouhin[1] = "orange"; ... syouhin[9] = "banana"; kosuu[0] = "4"; kosuu[1] = "2"; ... kosuu[9] = "5"; 個数は[]の数字の商品に対応。 個数をソート kosuu.sort(); ここでソートした個数に対応して商品もソートして、 for (i=0; i<kosuu.length; i++){ document.write(syouhin[i],kosuu[i],", "); document.write("<br>"); } と表示したいのですが、ソートした個数に対応した商品のソートの 仕方がわかりません。 どのような方法があるのでしょうか? よろしくお願いします。

  • 多次元配列のソートの仕方について

    Arrayクラスにsortというメソットについて質問です。 配列が多次元の場合、そのどれか1次元についてソートしたいのですが使い方がわからなく質問しました。 たとえば、a[n][m]という配列で a[0][0]=4 a[0][1]=3         a[0][0]=4 a[0][1]=3 a[1][0]=5 a[1][1]=5    →    a[1][0]=7 a[1][1]=4 a[2][0]=7 a[2][1]=4         a[2][0]=5 a[2][1]=5 だとします。 この配列をmの値が1のときについて最初の[n]をソートしたいです。 そして、mの値が0の値も[1]でソートしたものと一緒にソートしたいです。

Wi-Fiで印刷できない
このQ&Aのポイント
  • MFC-J737DNを使用していて、Wi-Fi経由で印刷することができません。
  • Windowsを使用しており、無線LAN接続でMFC-J737DNと接続しています。
  • Wi-Fiルーターの機種名はELECOMで、電話回線はひかり回線です。
回答を見る

専門家に質問してみよう