tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル組み合わせ。
記事No10661
投稿日: 2012/01/25(Wed) 15:26
投稿者ふつうのこ
ちょっと聞いてみたい問題が出てきましたので、連続投稿になりますがよろしくお願いします。

44の項目がありまして、その中から 2つ選んで組み合わせを作ります。
その組み合わせの中で 18個当たりの組み合わせがあるんですが、今はその組み合わせに
出てくる項目それぞれに対して Select Case 文で当たり判定をしています。

その際、Value1, Value2 の組み合わせが当たりとすると、
Select Case i
   Case Value1
      If j = Value2 Then …
   Case Value2
      If j = Value1 Then …
     .
     .
End Select
と 1つの組み合わせで 2つ判定文が必要になります。

現在は 18個の当たりなのでいいのですが、もしこれが 50の当たりになれば 100の Case文
となり、また3つの項目の当たりの判定になれば、Select文のネストとなり、その数は膨大な
ものとなります。

(Value1, Value2) で判定してくれるような便利なコントロールは無いでのでしょうか?

[ツリー表示へ]
タイトルRe: 組み合わせ。
記事No10662
投稿日: 2012/01/25(Wed) 16:23
投稿者オショウ
あたりの内容を保持する配列を作って、その中から探すという
アルゴリズムにすれば、プログラムのアルゴリズムは変化しな
いかと思いますが。

あたりの個数は、ループ回数になるくらいでしょうか。

また、あたりの組み合わせが増えたところで、ループ部をネス
トするくらいで、よほどヘタクソに作らなければ、時間的問題
は気にならないかと。

以上。参考まで

[ツリー表示へ]
タイトルRe: 組み合わせ。
記事No10663
投稿日: 2012/01/25(Wed) 17:17
投稿者魔界の仮面弁士
> 44の項目がありまして、その中から 2つ選んで組み合わせを作ります。
> その組み合わせの中で 18個当たりの組み合わせがあるんですが、

たとえば、元となる 44 個の
 ID  Value
 --  -----
  1  あああ
  2  いいい
  3  ううう
 :   :
 44  わわわ
なデータがあったとして。


「18個の当たり」なペア値というのは、
 HIT  ID1  ID2
 ---  ---  ---
   1    3    7
   2    8   25
   3   11   13
  :   :   :
  18    2   43
という一覧がある、という状況ですか?

それとも、
 HIT  Value1  Value2
 ---  ------  ------
   1  ううう  ききき
   2  くくく  ののの
   3  さささ  すすす
  :    :      :  
  18  いいい  ろろろ
な状態ですか?


どちらのパターンにしても、元となる「44 個の項目」を
Dictionary (あるいは配列、List、DataTable など)にでも入れておいて、
それらをループ処理で 18回×2項目 について順に取り出していけば良いかと。

[ツリー表示へ]
タイトルRe: 組み合わせ。
記事No10664
投稿日: 2012/01/26(Thu) 07:55
投稿者shu
>       If j = Value2 Then …

>       If j = Value1 Then …
これらの…がそれぞれどんな処理なのかですね。共通点があり
パラメータ化して同じ処理に出来るのかで答えは変わりますが、

同じ処理に出来ないのなら、処理分だけ記述する必要はあります。

パラメータ化できるのなら、パラメータ値をDictionaryとか配列で管理して
i,jからパラメータ値を求めそのパラメータ値に従い処理すればよいです。


> 現在は 18個の当たりなのでいいのですが、もしこれが 50の当たりになれば 100の Case文
となり、また3つの項目の当たりの判定になれば、Select文のネストとなり、その数は膨大な
ものとなります。

パラメータ化して同一処理にできなければそれは止むを得ないことです。処理が共通化出来るかがポイントとなると思います。

[ツリー表示へ]
タイトルRe: 組み合わせ。
記事No10670
投稿日: 2012/01/30(Mon) 09:52
投稿者ふつうのこ
レスが遅れてすみません。
回答ありがとうございます。

当たりパターンを配列に入れるなりして解決するしかないのですか。
うまいアルゴリズムにして、再帰にするとかも在り得ますが、逆にパフォーマンスが落ちる
事もあるみたいですね。
メモリもたらふく消費しますし。

質問の主旨は、そのような便利なコントロールは在るか、という事だったのですが、
皆さんの回答からは、無いということですね?

膨大なコードになるのは仕方の無い事だと割り切ります。
ありがとうございました。

[ツリー表示へ]
タイトルRe^2: 組み合わせ。
記事No10671
投稿日: 2012/01/30(Mon) 10:25
投稿者shu
> 質問の主旨は、そのような便利なコントロールは在るか、という事だったのですが、
> 皆さんの回答からは、無いということですね?
やりたい事がよくわからないし、当然やりたい事が一般的なことなのかも分からないので
不明なことに対しなんでもこなすコントロールというのはないです。まず、やりたい事を明確にすることだと思います。明確にして前レスで書いたように共通化できれば処理は短くなるし一般的なことであればコントロールとかクラスもあるかもしれません。

[ツリー表示へ]