我的問題是,我需要比較兩個列表,找到共享同一個字段的值對象的數量。請查找兩個列表的共同對象,或者一些連接操作。我不想使用Linq,因爲後來我需要訪問元素索引,但現在類/方法被簡化了。 類PIP:在兩個列表找到共同的項目
public class Pip{
public CONTROLLER.COLORS Color;
}
簡體類序列,基本上是個點的列表
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;
}
}
所以現在我有這種方法,應當返還我相同顏色的點子量兩個序列,其中每個點是一些顏色。
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
列表中的每個元素與當前畫中畫的顏色比較的checkPips
名單PIP當前顏色。如果出現匹配,我們檢查,如果匹配lockPips
「當前畫中畫已經得到遏制。如果沒有,那麼我們增加計數器,並添加lockPips
「當前畫中畫checkedPips
從而確保它將在下次檢查被跳過的名單。
調試顯示excludedPips
列表中已經包含第一次檢查過的pip,並且它在每次檢查時都使用它的顏色,從而使算法跳過「if」語句中的所有指令。
實例:lockPips:紅,綠,青checkPips:紅,綠,青 預期matchedColors:3個實際matchedColors:1(RED)
lockPips:BLUE,青,藍checkPips:藍,藍,RED預期 matchedColors:2個實際matchedColors:1(藍色)
因此,在任何實際matchedColors
> 0的結果爲1