-2

我有一个清单

 List<PossibleSolutionCapacitors> PossibleSolution = new List<PossibleSolutionCapacitors>(); 

这是它的类

 class PossibleSolutionCapacitors
    {
        public int CapacitorALocation { get; set; }
        public int CapacitorBLocation { get; set; }
        public int CapacitorCLocation { get; set; }    
    }

我有 3 个整数

 int A;
 int B;
 int C;

我需要检查 A、B、C 的任何组合是否包含在可能的解决方案列表中

即如果列表中包含以下内容(布尔值说真/假就足够了)

  1. A,B,C
  2. A,C,B
  3. 乙,甲,丙
  4. ETC...

这可能吗 ?

谢谢达摩

4

2 回答 2

3

Save 解决方案的一个变体:

var fixedSet = new HashSet<int>(){A,B,C};
bool result = PossibleSolutions.Any(x => fixedSet.SetEquals(
    new[] { x.CapacitorALocation,x.CapacitorBLocation,x.CapacitorCLocation }));
于 2013-09-03T21:22:30.523 回答
2
var query = PossibleSolution.Any(x=>HashSet<int>.CreateSetComparer()
               .Equals(new HashSet<int>(){A,B,C}
                   ,new HashSet<int>(){x.CapacitorALocation,x.CapacitorBLocation,x.CapacitorCLocation}));

为了节省一些时间,您可以HashSet<int>(){A,B,C}预先创建和比较器,并在您的代码中调用它,例如:

var fixedSet = new HashSet<int>(){A,B,C};
IEqualityComparer<HashSet<int>> comparer = HashSet<int>.CreateSetComparer();

var query = PossibleSolution.Any(
            x=>comparer.Equals(fixedSet,new HashSet<int>(){x.CapacitorALocation,x.CapacitorBLocation,x.CapacitorCLocation}));

最后,对于使用SetEquals而不是比较器的版本,请查看 Thomas Levesque 解决方案。

于 2013-09-03T21:13:39.163 回答