2012-03-08 10 views
1

サイズの種類を取得する必要があるメソッドがあります。たとえば、 "small"、 "medium"または "large"と返される文字列が必要です。各条件が別の条件に依存する方法を効率的に設計するにはどうすればよいですか?

だから私はGetSize(int size)を呼び出します。しかし、私はまた、サイズを返す方法を知っている必要があります、私は "小さな"を返すか、私は "s"を返すしたいですか?だからメソッドはGetSize(int size, enum format)になりました。

今私は、スイッチケースを行うことができますが、それはだから私は「大きさ」のために、すべてのケース内部のスイッチケースをしなければならないでしょう

switch (size)  
{  
    case SMALL_SIZE: 
     switch(format) 
      case format::short 
      case format::long 
} 

だろう。私はそれを分解して、すべてのサイズのケースでフォーマットを取得するメソッドを呼び出すこともできます。

これはたくさんの仕事のようですが、ここでは3つのサイズのケースしかありませんが、それは他のケースでは10ケースだったと想像してください。私のソリューションは最高ですか、それとも良い方法がありますか?

+2

何を? – PlasmaHH

+0

これはそれぞれの 'case format :: X'で実際にどのような行動が取られるかによって異なります。ルールがあれば、それを考慮に入れることができます。すべてのケースが具体的であれば、それはより困難になります。メソッドが何をするかについて、より多くの洞察を提供してください(より多くのコードが理想的です)。 –

+0

2つの異なる機能はどうですか? 'GetSizeShort(int size)'と 'GetSizeLong(int size)' – Tim

答えて

3

あなたのメソッドは単純な2次元配列に置き換えることができるようです。

// Use actual sizes in the declaration below 
static string FormattedSize[2][2] = { 
    {"small", "s"} 
, {"medium", "m" } 
// and so on... 
}; 

string GetSize(int size, enum format) { 
    return FormattedSize[size][format]; 
} 
+0

は、ペアをキーとしてマップを使う方が効率的でしょうか? – Pittfall

+0

@ Pittfall一般的に効率を上げてアレイを打つことはほとんど不可能です。ただし、この場合は絶対に問題はありません。検索するアイテムが10個しかない場合、この関数を何十億という呼び出しを本当にタイトなループで呼び出さない限り、違いは見られません。 – dasblinkenlight

0

またの線に沿って何かを行うことができます:マップ<ペア 、文字列>または類似について

switch(true) { 
case ((size == SMALL_SIZE) && (format == format::short)): 
case ((size == MEDIUM_SIZE) && (format == format::short)): 
    return "s"; 
    break; 
case ((size == LARGE_SIZE) && (format == format::short)): 
case ((size == SMALL_SIZE) && (format == format::long)): 
    return "m"; 
    break; 
case ((size == MEDIUM_SIZE) && (format == format::long)): 
case ((size == LARGE_SIZE) && (format == format::long)): 
    return "l"; 
    break; 
} 
関連する問題