私の問題は、2つのリストを比較し、同じフィールドの値を共有するオブジェクトの量を見つける必要があるということです。 2つのリストの共通オブジェクト、またはいくつかの結合操作を見つけます。私は、Linqを後で使うために要素のインデックスにアクセスする必要はありませんが、今のところクラス/メソッドは単純化されています。 クラスピップ:だから今、私は私に二つの配列のために同じ色のピップの量を返還しなければならない。この方法は、それぞれが持っている基本的ピップ2つのリストの共通項目を見つける
public class Sequence{
private List<Pip> pips = new List<Pip>();
public Sequence(Pip[] pips)
{
for (int i = 0; i < pips.Length; i++)
{
addPip(pips[i]);
}
}
public List<Pip> getPips()
{
return pips;
}
}
のリストである
public class Pip{
public CONTROLLER.COLORS Color;
}
簡素化されたクラスのシーケンスピップは色があります。
private int getMatchedColors(Sequence lockSeq, Sequence checkSeq)
{
List<Pip> lockPips = lockSeq.getPips();
List<Pip> checkPips = checkSeq.getPips();
List<Pip> excludedPips = new List<Pip>(lockPips.Count);
int matchedColors = 0;
for (int i = 0; i < lockPips.Count; i++)
for (int j = 0; j < checkPips.Count; j++)
if (checkPips[i].Color == lockPips[j].Color && !excludedPips.Contains(lockPips[j]))
{
matchedColors++;
excludedPips.Add(lockPips[j]);
break;
}
return matchedColors;
}
論理が始まる理由は次にあります。 lockPips
の各要素を持ち、現在のpipの色をcheckPips
'list pipの現在の色と比較します。一致が発生した場合、一致したlockPips
'の現在のpipが既にチェックされているかどうかをチェックします。そうでない場合は、カウンタをインクリメントして、checkedPips
のリストにlockPips
'現在のピップを追加し、次のチェックでスキップされることを確認します。
デバッグすると、最初にチェックされたピップがリストに既に含まれており、すべてのチェックでその色が使用されるため、「if」ステートメントのすべての命令をスキップするアルゴリズムを示しています。
例:lockPips:RED、GREEN、GREEN checkPips:RED、GREEN、GREEN 予想matchedColors:3実際matchedColors:1(RED)
lockPips:青、青、checkPips:BLUE、BLUE 2実際のmatchedColors:1(BLUE)
だから、実際matchedColors
> 0での結果はあなたがあなた自身のLOを記述する必要はありません。1.