• 0

C# Compare Multiple Ranges to Multiple Ranges


Question

I've spent a lot of time trying to think through this issue on my own, but I'm not getting a better answer than what I have and my answer is HORRIBLE.  So...  feel free to pop me upside my head and say; "dumbass...."

 

I have a situation where I have multiple ranges.  i.e. 100 to 200 and 100 to 200 (yes that is the same value ranges, but each range is a separate list of property values.  (just go with it)   I have a second set of values.  Each object in this second set can have a range within those two ranges.  (I'll give examples below)  What I am attempting to find out is the subset of values from the first sets that are not within the second set.

 

Property Sets

"Set1"  range from 0 to 3

"Set2"  range from 0 to 3

 

Object Sets

"Object1"  range for "Set1" from 0 to 2, range for "Set2" 0 to 3

"Object2"  range for "Set1" from 0 to 3, range for "Set2" 0 to 2

 

In this example this example there would be a subset for for the values not found in the objects that would equal

Set1 3, Set2, 3

3 answers to this question

Recommended Posts

  • 0

So,

Object Sets define a sub-range of the property sets.

And you are trying to find the values NOT covered in the sub-range?

Rephrasing,

Set1 and Set2 are ranges of values, while Object1 and Object2 define sub-range of Set1 and Set2.

Which values are not in the sub-ranges of Object1 and Object2?

Do you want a list of these values back?

EDIT: Or you want the list of items which different between range of Set1 and range of Set2 in Object1/Object2?

EDIT 3: Nvm...

EDIT 4: Here is a hint on my current understanding,

            var ss1 = set1.Take(object1.range1.To)
                .Skip(object1.range1.From);

            var ss2 = set2.Take(object1.range2.To)
                .Skip(object1.range2.From);


            var answerForObject1 = ss1
                .Except(ss2)
                .Union(ss2.Except(ss1))
                .ToList();
Edited by _Alexander
  • 0

To say this more simply, are you looking for relative compliment? http://en.wikipedia.org/wiki/Complement_(set_theory) (check the picture).

 

If so, the answer is basically setB.Except(setA) (using Alexander's code above).

  • 0

If these are contiguous sequences of natural numbers, then you can simply compare the bounds which would be more efficient than a more general solution based on Except as already suggested.
 
For example, if the complete range is { 100..200 }, and the object range is { 150..175 }, then the set of missing values is { 100..149 } U { 176.. 200 }. More generally speaking if the complete range is { C1..C2 } and the object range is { O1..O2 }, then the set of missing values is { C1..O1 - 1 } U { O2 + 1..C2 }.

In C#:

Enumerable.Range(c1, o1-c1).Concat(Enumerable.Range(o2+1, c2-o2))

Of course this assumes that o1>=c1 and o2<=c2.

This topic is now closed to further replies.
  • Posts

    • Weird how some people don't need to crash 7 rockets before they get it right.
    • Or it's a bug that can easily be fixed with an update. My guess is the limitation is there to prevent game makers from doing dumb things like having a racing game constantly rumble while the car is in motion. Sounds like the threshold or detection needs to be tweaked if it is triggering for no reason.
    • Nice I guess. Azure's DaaS feature has supported that for years. It's so odd to me how MS is deploying Azure and 365 DaaS as two totally different services with different features. I would think the 365 cloud desktops would just be a slightly dumbed down frontend that manages the same service.
    • Oh and gaming on a PC cost way more. To get PS5 Pro performance on a PC it will cost you more, especially with the crazy GPU costs today. While you can play Last of US and Horizon, finally, you cant play GT7 unless you have a PS5 (other games as well).
    • IT admins will soon be able to provision cloud apps rather than entire Windows 365 Cloud PCs by Usama Jawad As we discussed earlier, Windows 365 Cloud PC is a neat way to access virtualized operating systems without getting access to physical hardware. It makes it much easier to work in hybrid or remote environments using hardware and software managed on the cloud by your organization. However, Microsoft is making this process even more convenient with a private preview for Windows 365 Cloud Apps. In its announcement, Microsoft has revealed that it is testing a way to deliver individual apps to users securely via Windows 365, instead of having an entire Cloud PC provisioned for them. It is important to note that these apps will still be hosted on the Cloud PC, a user just won't need access to a dedicated Cloud PC. Microsoft believes that this improved way of app delivery will facilitate seasonal and remote workers by getting them access to just the line-of-business (LOB) apps that they require, while also offering centralized and simplified management capabilities. Importantly, Redmond believes that this will facilitate migration from on-prem virtual desktop infrastructure (VDI) to the cloud too. Deploying this new experience is fairly straightforward for any IT admin who has prior experience with setting up Windows 365. They will need to select an "app-only" experience during the configuration process instead of the full desktop mode and then control the licenses and app access. During this private preview period, only apps available in the Start menu of the gallery or custom images are supported, but more types of apps will be supported for streaming as we get closer to general availability (GA). On the end-user side, customers with Cloud Apps provisioned for them will be able to launch them from the Windows App gateway. Any security policy that applies to the associated Cloud PC will also apply to the Cloud App in use. Microsoft has encouraged those interested in joining the private preview to contact their Microsoft account team or fill in this form. There is no word yet regarding general availability.
  • Recent Achievements

    • Week One Done
      slackerzz earned a badge
      Week One Done
    • Week One Done
      vivetool earned a badge
      Week One Done
    • Reacting Well
      pnajbar earned a badge
      Reacting Well
    • Week One Done
      TBithoney earned a badge
      Week One Done
    • First Post
      xuxlix earned a badge
      First Post
  • Popular Contributors

    1. 1
      +primortal
      671
    2. 2
      ATLien_0
      284
    3. 3
      Michael Scrip
      223
    4. 4
      +FloatingFatMan
      196
    5. 5
      Steven P.
      137
  • Tell a friend

    Love Neowin? Tell a friend!