簡體   English   中英

C#:檢查對象(具有最小和最大屬性的對象)是否落在任何現有對象之間? 在里面解釋

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM