0

一連の基準に基づいてリスト内のオブジェクトを見つけようとしています。基本的なロジックは次のようになります

for (objectx obj : list)
{
    if (object.property1 > criteria1)
        //accept object
    else (object.property1 == criteria1)
    {
        if (object.property2 > criteria2)
            //accept object
        else (object.property2 == criteria2)
        {
            if (object.property3 > criteria3)
                  ... etc
        } 
    }                                  
}

この混乱を単純化するエレガントな方法はありますか?

4

4 に答える 4

1
boolean accept = false;
for (int i = 0; i < object.numProps(); i++) {
   if (object.prop[i] > criteria[i]) {
       accept = true;
       break;
   } else if (object.prop[i] < criteria[i]) 
       break;
   // loop continues only if object.prop[i] == criteria[i]
}
于 2011-08-16T15:01:30.533 に答える
0

すべてのプロパティをチェックするメソッドを作成し、ループ内で次のように簡単に言うことができます。

for (objectx obj : list)
{
    if(checkProperties(obj))
    {
        //Do Stuff
    }
}
于 2011-08-16T14:15:09.250 に答える
0

以前私がしたように何かをしたい場合は、それが役に立ちます。あなたのようにNHibernateでデータベース内のオブジェクトを検索したかったのです。ユーザーが入力したすべての条件を収集する Query オブジェクトを作成しました。そして、関連するプロパティを Query オブジェクトに設定すると、この基準を次のように追加しました。

public bool Archive
    {
        set
        {
            if(value)
            {
                criteria.Add(Restrictions.Eq("Archive", true));
            }
        }
    }

    public bool IsFavorite
    {
        set
        {
            if (value)
            {
                criteria.Add(Restrictions.Eq("IsFavorite", true));
            }
        }
    }

メモリ内のオブジェクトをフィルタリングするだけの場合。仕様パターンも使用できます。

于 2011-08-16T14:50:06.577 に答える
0

ビジネス ロジックにちなんで名付けられたメソッドを追加すると役立つ場合があります。次に、コードを読むと英語のように読む必要があり、実際の比較は別の場所にあります。考えるのも楽になります。

于 2011-08-16T14:19:01.670 に答える