У меня есть списокувидеть, если любой элемент существует в любом элементе списка
List<FirstIterationCapacitors> FirstIteration = new List<FirstIterationCapacitors>(); // A set of Solution capacitors object
Вот это класс
class FirstIterationCapacitors
{
public int Iteration { get; set; }
public int CapacitorALocation { get; set; }
public int CapacitorBLocation { get; set; }
public int CapacitorCLocation { get; set; }
}
Теперь у меня есть второй список
List<PossibleSolutionCapacitors> PossibleSolution = new List<PossibleSolutionCapacitors>(); // Possible Solution capacitors object
здесь является класс
class PossibleSolutionCapacitors
{
public int CapacitorALocation { get; set; }
public int CapacitorBLocation { get; set; }
public int CapacitorCLocation { get; set; }
}
Для данной строки (т.е. для строки 2) в PossibleSolution мне нужно, чтобы увидеть, если
- PossibleSolution.CapacitorALocation не существует в FirstIteration.CapacitorALocation (т.е. равный итерации X) или FirstIteration.CapacitorBLocation (равный итерации X) или FirstIteration.CapacitorCLocation (равный итерации X)
ИЛИ
- PossibleSolution.CapacitorBLocation не существует в FirstIteration.CapacitorALocation (что равно итерации X) или FirstIteration.CapacitorBLocation (что равно итерации X) или FirstIteration.CapacitorCLocation (что равно итерации X)
ИЛИ
- PossibleSolution.CapacitorCLocation сделать х годов не существует в FirstIteration.CapacitorALocation (что равно итерации X) или FirstIteration.CapacitorBLocation (что равно итерации X) или FirstIteration.CapacitorCLocation (что равно итерации X)
идеале булево о том, правда, ложь, если условие истинно/ложно
Вот что я пытался до сих пор, но он не работает
int D = 4; // The row i care about
int E = PossibleSolution[D].CapacitorALocation;
int F = PossibleSolution[D].CapacitorBLocation;
int G = PossibleSolution[D].CapacitorCLocation;
var fixedSet = new HashSet<int>() {E};
if (!FirstIteration.Any(x => fixedSet.SetEquals(new[] { x.CapacitorALocation, x.CapacitorBLocation, x.CapacitorCLocation })))
{
fixedSet = new HashSet<int>() {F};
if (!FirstIteration.Any(x => fixedSet.SetEquals(new[] { x.CapacitorALocation, x.CapacitorBLocation, x.CapacitorCLocation })))
{
fixedSet = new HashSet<int>() {G};
if (!FirstIteration.Any(x => fixedSet.SetEquals(new[] { x.CapacitorALocation, x.CapacitorBLocation, x.CapacitorCLocation })))
{
//Match does not exist so do some real work here ......
}
}
}
Спасибо, damo
Что делают SetEquals? –
Посмотрите это решение вчера вечером на аналогичную проблему - http://stackoverflow.com/questions/18601502/list-permutation-existance – user1438082
@LeoLorenzoLuis Возвращает true, если два набора имеют одинаковые элементы, а false, если они этого не делают. Подумайте об этом как о «SequenceEquals», который не требует, чтобы элементы находились в одном порядке. – Servy