![](/img/trans.png)
[英]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.