1

私の状況では、複数の選択オプションの組み合わせを定義する単一の値を取得する必要があります。これが私がやろうとしていることの小さな例です。

ユーザーがシャツを購入しています。ユーザーがシャツを購入するときに選択できるさまざまなオプションがあります。各選択グループから選択できるオプションは1つだけです(選択する必要があります)。選択グループは、ラジオボタンリストまたはドロップダウンリストとして表すことができます。これは、グループごとに1つの選択のみを許可するものです。例えば:

シャツの色:赤、青、緑、黒、白、または黄色
シャツのサイズ:X-小、小、中、大、X-大、XX-大
シャツのデザイン:横縞、縦縞、ポルカドット、斜め縞、デザインなし
シャツタイプ:ボタンアップシャツ、ポロシャツ、Tシャツ、長袖Tシャツ、スウェットシャツ

したがって、この問題のために、各グループから選択できるオプションは1つだけです。可能な選択肢を使用して、合計900の異なるバリエーション(6x6x5x5)を取得します。次のオプションの値が次の場合:

赤=1、青= 2、緑= 3、黒= 4、白= 5、黄色=
6X-小=0、小= 1、中= 2、大= 3、X-大= 4、XX-大=5
横縞=0、縦縞= 1、水玉= 2、斜め縞= 3、デザインなし=4
ボタンアップシャツ=0、ポロシャツ= 1、Tシャツ= 2、長袖Tシャツ= 3 、スウェットシャツ= 4

また、{赤、X-小、横縞、ボタンアップシャツ} = 1および{青、X-小、横縞、ボタンアップシャツ}=2などの選択

行われた選択に基づいて値を見つける正しい方法は何ですか?たとえば、{黒、大、横縞、Tシャツ}の選択値はどうあるべきで、どのようにして解決策にたどり着きますか?私はそれに指を置くことができず、私が試したすべてが失敗したようです。それはおそらく単純な解決策であり、私は今ちょうど頭がおかしいです。

4

6 に答える 6

5

オプションの値を文字列のように連結できます(個々の値を文字列に変換し、連結してから整数に変換することにより)。したがって、{黒、大、横縞、Tシャツ}は4302になります。これにより、2つの可能な組み合わせが同じ識別子を持たないことが保証されます(私は数学の専門家ではありませんが)。

于 2009-06-03T17:26:18.963 に答える
1

私の考えでは、シナリオはShirt4つの列挙型(、、、および)を持つクラスにColorマップさSizeれます。このクラスには、4つの列挙型すべてのタイプのプライベートメンバーを公開するパブリックプロパティがあります。DesignType

したがって、1つのシャツインスタンスに、900の可能な組み合わせを気にすることなく、4つのプロパティすべてを設定できます。さらに、1つのShirtインスタンスには、各プロパティの可能な組み合わせが1つだけあります。どの整数値がどのタイプのプロパティにマップされるかを覚えていなくても、直感的な方法で設定された値のタイプを照会できます。これがまさに列挙型の目的です!;-)

于 2009-06-03T17:35:09.310 に答える
0

オプションの組み合わせごとに単一の数値が本当に必要ですか?または、ユーザーの選択を既知の単位にグループ化する方法が必要ですか?

Shirt後者の場合は、各選択タイプ(色、サイズ、デザイン、およびタイプ)のプロパティを使用してクラスを作成することをお勧めします。各プロパティの値の数には制限があるため、これらを列挙値にすることもできます。

ユーザーの選択が完全に行われると、インスタンスの各プロパティの値をチェックしてShirt、最終的なシャツを組み合わせる方法を知ることができます。

于 2009-06-03T17:24:49.323 に答える
0

それは絶対に単一の値である必要がありますか?列挙型のコレクションは、最も論理的な選択として私を襲います:

ShirtColor Color;
ShirtSize Size;
ShirtPattern Pattern;
ShirtType Type;

enum ShirtColor {Red, Blue, Green, Black, White, Yellow};
...

単一の値にする必要がある場合は、Int32を選択し、格納する4つの情報のそれぞれにそのintの各バイトの各フラグを使用できます。抽出する特性ごとにビットマスクを使用します。何かのようなもの:

enum ShirtColor : byte {Red=0, Blue=1};
enum ShirtSize : byte {Small=0, Large=1};

int shirtInfo = 0x0001;

int colorOffset = 0;
int sizeOffset = 8;

ShirtColor color = (ShirtColor)(shirtInfo << colorOffset);
ShirtSize size = (ShirtSize)(shirtInfo << sizeOffset);

Console.WriteLine(Enum.GetName(typeof(ShirtColor), color));
Console.WriteLine(Enum.GetName(typeof(ShirtSize), size));
于 2009-06-03T17:25:56.777 に答える
0

1つの方法は、さまざまな種類の情報にさまざまな大きさの番号範囲を割り当てることです。

Red = 1, Blue = 2, Green = 3, Black = 4, White = 5, Yellow = 6
X-Small = 100, Small = 200, Medium = 300, Large = 400, X-Large = 500, XX-Large = 600
Horizontal Striped = 1000, Vertical Stripes = 2000, Polka Dots = 3000, Diagonal Stripes = 4000, No Design = 5000
Button Up Shirt = 10000, Polo Shirt = 20000, T-Shirt = 30000, Long Sleeve T-Shirt = 40000, Sweatshirt = 50000

これは、42304がミディアムサイズの縦縞のある黒の長袖Tシャツであることを意味します。

個人的には、それを禁止する特定の要件がない限り、おそらくさまざまなプロパティと個別の値を保存して処理します。

于 2009-06-03T17:38:56.867 に答える
0

シャツの色:赤、青、緑、黒、白、または黄色シャツのサイズ:X-小、小、中、大、X-大、XX-大シャツのデザイン:横縞、縦縞、ポルカドット、斜め縞、デザインなしシャツタイプ:ボタンアップシャツ、ポロシャツ、Tシャツ、長袖Tシャツ、スウェットシャツ

ここでは4つのカテゴリがあり、各カテゴリにはいくつかの値があることに注意してください。カテゴリには4バイト整数と各バイトを使用できます。

その場合、{黒、大、横縞、Tシャツ}が値(4 + 4 * 2 ^ 8 + 1 * 2 ^ 16 + 3 * 2 ^ 24)になります。

価値がぎっしり詰まっているとは思わないでください。そうすれば、自然に解決できます。

于 2009-06-03T18:20:37.720 に答える