HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0604
KENTA配列変数の増減8解決


KENTA

リンク

2007/6/4(Mon) 19:04:29|NO.8755

内容を変更せずに配列変数を減らしたり、増やしたりできないのでしょうか?
例えば・・・・。

dim a,10 ;ここでaの10個の配列変数を作る。 ;aの内容を変更しないまま、ここで何かの処理をする mes length(a) ;表示される数は10以外になる
どうでしょうか?できるのでしょうか?



この記事に返信する


KENTA

リンク

2007/6/4(Mon) 19:06:47|NO.8758

修正。
配列変数を減らしたり、増やしたりするのではなく、
配列の数を減らしたり、増やしたりしたいのです。



eller

リンク

2007/6/4(Mon) 21:09:31|NO.8761

KENTAさん、こんばんは。配列の数を増やすのはHSP3ならば実現可能です。

dim a, 10 a(10) = 0 mes length(a)
減らすのは一度別の配列を経由した方が良いでしょう。

dim a, 10 dim tmp, 5 repeat length(b) tmp(cnt) = a(cnt) loop dim a, length(tmp) repeat length(tmp) a(cnt) = tmp(cnt) loop
ただしどちらにしても大きな配列を扱う際の負荷が気になりますので、別途「配列の要素数を保持する変数」を用意して使った方が良いと思います。



KENTA

リンク

2007/6/4(Mon) 21:20:23|NO.8763

2次元配列以上の配列を変更するとき何か方法はありますか?
(他の変数に移さずに)



eller

リンク

2007/6/5(Tue) 20:37:29|NO.8786

2次元目に限り増やすことができます。1次元目に対して同じ方法を試みてもエラーが発生します。

dim a, 10, 10 a(0, 10) = 0 mes length2(a)
減らすのは1次元同様、他の変数を経由する必要があるのではないでしょうか。

しかし、メモリの再確保が怖いですし、やはりやるべきではないと思います。
何を作られているのかは分かりませんが、代替手段を探してみてはいかがでしょうか。



KENTA

リンク

2007/6/5(Tue) 21:08:53|NO.8791

増やすことは良く分かりました。
減らすのは、やはり他の配列変数に移し変えていくしか
ないようですね・・・。
ellerさん、回答ありがとうございます。



eller

リンク

2007/6/5(Tue) 21:53:38|NO.8795

いえいえ、参考になれれば幸いです。

PVAL2構造体をいじれば大丈夫かなとも思いましたが、そんなことはなさそうですね。



kz3

リンク

2007/6/5(Tue) 23:13:33|NO.8801

こんばんわ。
HSP3の配列要素の自動確保についてはこちらを参考にしてみてください。
=>http://hspwiki.tm.land.to/?%CA%D1%BF%F4%CE%CE%B0%E8%A4%CE%BC%AB%C6%B0%B3%CE%CA%DD

オフセットという言葉は別の言葉に直したほうがいいと思いつつ直していません...。
なぜ、2次元目に限って(2次元に限らない)のみ拡張が可能なのか、ということを説明したつもりです。
1次元目を拡張することも可能ですが、単純に"ここからあっちにこれだけのサイズをガボっとコピー"とはいかず、
コピーに費やす手間を省くための仕様だと思います。

#って以前も話題が出たような。



eller

リンク

2007/6/6(Wed) 08:56:16|NO.8811

>kz3さん
こんにちは、回答ありがとうございます。
数学っぽい言い方をすれば「(n + 1)次元配列はn次元配列を要素に持つ配列である」(ただしnは自然数)ということですね。一度は学んだはずですが、失念していたようです。とてもすっきりしました。

>#
http://hsp.tv/play/pforum.php?mode=pastwch&num=6281
でしょうか。少し違う気もしますが…。



ONION software Copyright 1997-2021(c) All rights reserved.