VBプログラマ質問スレ(6.0以前) Part55
at TECH
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドのURL
■項目テキスト
550:デフォルトの名無しさん 10/04/01 20:57:27 >>548 どっちがいいってもんでもなくて nの個数とか速度とかメモリとかの状況によるでしょ 最後にゃ実際にやってみないとね 551:デフォルトの名無しさん 10/04/01 21:00:47 連想配列使えばいいのに 552:デフォルトの名無しさん 10/04/01 21:27:21 ここって需要まだあるの? ずいぶん前のじゃない?60 553:デフォルトの名無しさん 10/04/01 22:36:43 >>552 良いか悪いかは置いといて需要はまだまだ多いぞ いまだに新規案件で採用されたりするからな Windows7でも動くしな 554:デフォルトの名無しさん 10/04/01 22:40:40 新規案件で!! 555:デフォルトの名無しさん 10/04/01 22:48:30 >>544,548 まとめ その状態から重複していない事を担保するにはどんな方法でも最低n-1回のループは必須。 「ユニーク数のカウント」を最高速化したいなら、はじめから重複しないように追加しておくか、 そもそもカウントを配列追加時に行っておくのが正しい。 >>546の方法は、最大値の数だけ別配列を用意してバケツソート的手法でカウントしている。 このタイプの手法が使えるなら、これが概ね最速と考えられる。 だが>>546のコードはちょっと無駄が目立つ。ついでに999を越えても動作するようにしてみた。 Dim Huga() As long Dim i As Long, Kosuu As Long Redim Preserve Huga(999) '0〜999決め打ち OnError GoTo AryErr '用意したHuga()のサイズが足りなかった場合エラーをトラップ For i = 0 To Ubound(Hoge) If Huga(Hoge(i)) Then Kosuu = Kosuu + 1 'カウントアップ Else Huga(Hoge(i)) = 1 End If next AryErr: Redim Preserve Huga(Hoge(i)): Resume 0 '999で足りなかった場合に増量して再処理 コーディング的には>>551の言うようにCollectionやDictionaryを活用するほうが手っ取り早い。(OnErrorが嫌ならDic) 数が少ない場合や、値が整数ではない(小数を含むなど)、または値の種類の範囲が大きい(0や999999999を含む)場合では メモリ確保の時間的コストとメモリの量的コストが大きすぎる結果になり、>>546的手法は適さない。 結局のところ>>550。
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
5021日前に更新/172 KB
担当:undef