- PR -

C#構造体配列の操作

1
投稿者投稿内容
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2006-07-13 13:19
はじめまして、C#初心者です。
構造体配列の先頭行に新たなデータを1件インサートしたいのですが、
既存のデータをインデックスをずらして保存する方法がよくわかりません。
Array.Copyで試してみたんですが・・・・。
ループさせて1件づつインデックスをずらしていくのは嫌なので
どなたかご伝授いただければ幸いです。
<環境>
.NET2003 C#
Framework1.1

<ソースはこんな感じ>
struct ST_AAA
{
public int a;
public int b;
}

private void MethodAAA()
{
ST_AAA[] st_aaa = new ST_AAA[10];

//先頭からデータ埋め
for(int i = 0;i < 9;i++)
{
st_aaa[i].a = i;
st_aaa[i].b = i+1;
}

//既存の9件のインデックスをずらして保存
Array.Copy(st_aaa,0,st_aaa[1],1,9); //←コンパイルエラー

//先頭にデータをインサート
st_aaa[0].a = 100;
at_aaa[1].b = 200;
}



想馬
大ベテラン
会議室デビュー日: 2003/05/29
投稿数: 245
お住まい・勤務地: 神奈川・東京
投稿日時: 2006-07-13 13:25
C#は知らないから思いつきで検索したらこんなのありました。

http://www.google.co.jp/search?hl=ja&client=firefox&rls=org.mozilla%3Aja%3Aofficial&q=C%23+ArrayList+Insert&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja

# サイズが決まっていないならコレクションを使いましょう
_________________
最近蛇使いになれるようそっちも勉強中@やっぱり仕事に関係ないけど

[ メッセージ編集済み 編集者: 想馬 編集日時 2006-07-13 13:31 ]
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-07-13 13:33
引用:

ぴんふさんの書き込み (2006-07-13 13:19) より:
構造体配列の先頭行に新たなデータを1件インサートしたいのですが、


ってな場合は構造体の配列じゃなくてコレクションでやるってのが常識らしい。
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2006-07-13 14:12
ご回答ありがとうございます。
やはりコレクションですか・・・・。
実は作業がVB6からC#へのコンバート
なのでできればTypeの配列をそのまま使いたい
という要望があったものですから・・・。
ArrayListで実験したらうまくできたので
その方向で進めようと思います。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-07-13 15:21
引用:

ぴんふさんの書き込み (2006-07-13 14:12) より:
実は作業がVB6からC#へのコンバート
なのでできればTypeの配列をそのまま使いたい
という要望があったものですから・・・。


VB6.0の配列にだって先頭に挿入する機能なんて無かったし、行おうとするなら「ループさせて1件づつインデックスをずらしていく」必要があったはずですよ。もしかしてCollectionを使っていたのではないですか?

VB6.0のCollecionに相当する機能はSystem.Collections.DictionaryBaseです。VB6.0のCollectionとは多少使い勝手が異なります。もしくはVB6.0との互換性のために用意されているMicrosoft.VisualBasic.Collectionを用います。

Microsoft.VisualBasic名前空間には他にもVB6.0互換の命令が用意されているので、一度確認した方が良いでしょう。

_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/

[ メッセージ編集済み 編集者: 甕星 編集日時 2006-07-13 15:25 ]
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2006-07-13 18:15
甕星さんへ

VB6側ではコレクションは使っていません。
ループさせてゴリゴリとインデックスをずらして
先頭の行を空けてます(苦笑)。
これはスレを立てる前に確認済みです。

ソースを簡潔にして欲しいとの要望もあるので
今回のコンバートにあたってループさせるのを
やめるために悩んだ挙句スレを立てるに至ったわけです。

貴重なご意見ありがとうございました。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-07-13 18:21
引用:

ぴんふさんの書き込み (2006-07-13 18:15) より:
VB6側ではコレクションは使っていません。
ループさせてゴリゴリとインデックスをずらして
先頭の行を空けてます(苦笑)。


うわ。おそろしいwww
引用:

これはスレを立てる前に確認済みです。
ソースを簡潔にして欲しいとの要望もあるので
今回のコンバートにあたってループさせるのを
やめるために悩んだ挙句スレを立てるに至ったわけです。


いや↓だったらこーゆー手段をせばめちゃうだけの書き込みはしないほうがいいでしょ・・・
誤解もされやすいし。実際に誤解されたし。
>実は作業がVB6からC#へのコンバート
>なのでできればTypeの配列をそのまま使いたい

[ メッセージ編集済み 編集者: ぶさいくろう 編集日時 2006-07-13 18:22 ]
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2006-07-13 19:21
引用:

誤解もされやすいし。実際に誤解されたし。


誤解を受けるような表現となったのは申し訳なく思っております。
皆さんのすばやい対応に感謝しております。
ありがとうございました。
以上。
1

スキルアップ/キャリアアップ(JOB@IT)