0

たとえば、数字のコレクションがあるとします。A = [2、3、4、5、6、7、8、9、10、11、12]。

そして、次のようないくつかのルールがあります。a:数は3の倍数です。b:数は5の倍数です。

ルールを使用すると、元のコレクションを3つに簡単に分割できます。

A_3 = [3, 6, 9, 12]
A_5 = [5, 10]
A_other = [2, 4, 7, 8, 11]

目標を達成するためにコレクションとルールのクラスを設計するための最良の方法を考えています。

  1. ルールの追加や削減は簡単です
  2. コレクション内の要素のタイプは簡単に変更できます

ありがとう。

4

2 に答える 2

7

私によると、アルゴリズムがアルゴリズムのさまざまなバリエーションと交換可能である場合に通常使用される戦略パターンを使用する必要があります。

例えば、

自分のような配列を作成するコードがある場合、特定の状況では3の倍数を選択し、他の状況では5の倍数を選択することができます。

戦略パターンは通常、次のように実装されます

アルゴリズムメソッドを使用して抽象基本クラスを宣言します。このメソッドは、具象クラスを継承することで実装されます。コードのある時点で、どの具体的な戦略が関連するかが決定され、後でそれがインスタンス化され、関連する場所で使用されます。

これがあなたの要件を満たしているかどうかはわかりません。

私はあなたがこれだけを使うことができると結論付けることはできません、私はいつもTIMTOWTDIを信じています

于 2012-09-10T12:13:49.100 に答える
0

あなたがC#を使いたいと仮定すると、私は次のようなものから始めます:

// General interface to filter out whatever you want, given a list:
public interface IFilterElements<T>
{
    IEnumerable<T> Filter(IEnumerable<T> elementList);
}


// An example imlementation - add more of these as required:
class FilterElementsThatAreEven<T> : IFilterElements<T>
{
    public IEnumerable<T> Filter(IEnumerable<T> elementList)
    {
        // Some implementation to return a sorted set / list
    }
}

呼び出しメソッドで、次のようなことを行うことができます。

// List to filter
IEnumerable<int> myListOfInts = new int[]{1, 2, 3, 4, 5, 6};

// Instantiation of the implementation - also where you specify the 
// type of data to filter (could be of class "MagicLemur" instead of int)
IFilterElements<int> myIntFilter = new FilterElementsThatAreEven<int>();

var filteredList = myIntFilter.FilterElementsThatAreEven();
于 2012-09-10T12:15:22.547 に答える