[英]Checking if a list of objects contains an object whose property has a specific value
[英]C# : Checking if an object (who has a min and max property) falls between any existing objects? Explained inside
我想知道是否有人可以帮忙?
我有一个包含对象集合的列表,每个对象都有一个min和max属性。
所以想象一下
id : 1
min : 10
max : 49
id : 2
min : 50
max : 69
id : 3
min : 70
max : 89
我不应该被允许创建一个像这样的新对象。
id : 4
min : 88
max : 91
因为这属于我已经拥有的范围。 (它与id 3重叠)因此没有重叠的范围。
我确实试图像这样解决它,但它无法正常工作
var test =
myObjects.FindAll(
o => myMinVal.Value >= o.Min && myMaxVal.Value <= o.Max).ToList();
所以基本上如果test不为null,意味着我有重叠。
我试过逆转大于和小于迹象....
我有什么想法让这个工作?
提前致谢
编辑
还要举例说明这个对象,它也应该失败,因为它不会碰撞任何特定的1个对象! 当你看到3原版时,它会发生冲突。
id : 4
min : 5
max : 91
我希望这是有道理的
你没有检查足够的东西。
基本上,您需要查看min是否在范围内,或者max是否在任何对象的范围内。 这是一个单位测试w /工作lambda:
[TestClass]
public class Overlap
{
List<TestData> data = new List<TestData>
{
new TestData { Id = 1, Min = 10, Max= 49},
new TestData { Id =2, Min=50, Max=69},
new TestData { Id=3, Min = 70, Max = 89}
};
[TestMethod]
public void BoundaryCheck()
{
var mydata = new TestData { Id=4, Min=69, Max=100};
bool fail = data.Any(d => (d.Min <= mydata.Min && d.Max >= mydata.Min) ||
(d.Max >= mydata.Max && d.Min <= mydata.Max));
Assert.IsTrue(fail);
}
class TestData
{
public int Id { get; set; }
public int Min { get; set; }
public int Max { get; set; }
}
}
我这样做:
class Interval {
public int Id { get; set; }
public int Min { get; set; }
public int Max { get; set; }
}
两种扩展方法,用于检查区间是否与其他区间重叠或多个区间中的任何一个:
public static bool Overlaps(this Interval interval, Interval targetInterval) {
return interval.Min <= targetInterval.Max &&
interval.Max >= targetInterval.Min;
}
public static bool Overlaps(this Interval interval, IEnumerable<Interval> targetIntervals) {
return targetIntervals.Any(t => interval.Overlaps(t));
}
用法:
var interval = new Interval { Min = 5, Max = 15 };
bool isOverlapping = interval.Overlaps(intervalList);
不能
myMinVal.Value >= o.Min
是
myMinVal.Value <= o.Min
编辑 -
这不起作用?
var isValid = myObjects
.Where(o => myMinVal.Value >= o.Min && myMaxVal.Value <= o.Max)
.Any();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.