C#.netで、二次元配列のデータ群を一次元配列に変換するコードを書きたいのですが、


1.ズバリなコードを書いていただいた方には50ポイント
2.参考になるURLをご紹介いただいた方には15ポイント

差し上げたいと思います。

なお、一次元に配置し直すルールは、左から列を優先にソートしなければなりません。

具体的には、
1 3 2 3
7 5 7 9
1 4 6 8
という二次元のとき、
1 7 1 3 5 4 2 7 6 3 9 8
という一次元に置き換えたいのです。

よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/09/27 19:07:28
  • 終了:--

回答(3件)

id:cx20 No.1

cx20回答回数607ベストアンサー獲得回数1082004/09/27 21:14:35

ポイント65pt

こんな感じでいかがでしょう?

static void Main(string[] args)

{

int[,] dataArray = {{1, 3, 2, 3},

{7, 5, 7, 9},

{1, 4, 6, 8}};

int n0 = dataArray.GetLength(0);

int n1 = dataArray.GetLength(1);

Console.WriteLine( ”n0 = {0}”, n0 );

Console.WriteLine( ”n1 = {0}”, n1 );

int [] data = new int[n0*n1];

for ( int x = 0; x < n1; x++ )

{

for ( int y = 0; y < n0; y++ )

{

data[y+x*n0] = dataArray[y,x];

}

}

for ( int i = 0; i < data.Length; i++ )

{

Console.WriteLine(”data[{0}] = {1}”,i, data[i]);

}

}

id:expansion05

ありがとうございます。大変参考になります。

2004/09/27 21:54:46
id:polyamid No.2

polyamid回答回数152ベストアンサー獲得回数12004/09/27 21:16:14

ポイント65pt

http://slashdot.jp/

スラッシュドット ジャパン : アレゲなニュースと雑談サイト

using System;

namespace DefaultNamespace

{

class MainClass

{

public static void Main(string[] args)

{

int[,] mysquare = {{1,2,3},{4,5,6},{7,8,9}};

int [] mylist = new int[mysquare.Length];

for (int i=0;i<mysquare.Length;i++){

mylist[i] = mysquare[i%mysquare.GetLength(0) , (int)(i/mysquare.GetLength(1))];

}

for (int i=0;i<mylist.Length;i++){

Console.Write(mylist[i]);

}

Console.WriteLine(” :-)”);

}

}

}

こんな感じでいかがでしょう。

id:expansion05

おースリム&スマート。

この発想はありませんでした・・ちょっと試してみます^^

2004/09/27 22:00:04
id:last_wednesday No.3

last_wednesday回答回数17ベストアンサー獲得回数02004/09/27 21:27:02

ポイント65pt

http://www-ise2.ise.eng.osaka-u.ac.jp/~iwanaga/programming/cshar...

配列 (C# によるプログラミング入門)

URLは配列の解説ページです。

2次元配列について。

{{1, 3, 2, 3}, {7, 5, 7, 9}, {1, 4, 6, 8}}(int[3, 4])を、{1, 7 ,1, 3, 5, 4, 3, 7, 6, 3, 9, 8}(int[12])に変換します。

int[,] matrix = new int[行,列];

--値を代入--;

int row = matrix.GetLength(0);

int col = matrix.GetLength(1);

int[] array = new int[row*col];

for(int i=0; i<col; i++){

for(int j=0; j<row; j++){

array[row*i+j] = matrix[j,i];

}

}

こんな感じでどうでしょうか?

id:expansion05

GetLengthの使い方は大変参考になりました。

皆さん頭の言い方ばかりで、素敵です!

イメージが形になりましたので、これにてお開きとさせていただきます。どうもありがとうございました。

2004/09/27 22:01:38

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません