如何获得数字范围

Joh*_*ohn 9 c#

我有一个数字间隔[1,20].

如果我决定禁止范围[15,18],我想要一种能够返回数量范围的方法.我的方法应该给我一个包含[1,15]和[18,20]的列表

Range对象可能看起来像那样

public class Range
{
     int Start {get;set;}
     int End {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

mat*_*att 47

那这个呢?

IEnumerable<int> range = Enumerable.Range(1, 20);
IEnumerable<int> banned = Enumerable.Range(15, 4);
return range.Except(banned);
Run Code Online (Sandbox Code Playgroud)

Enumerable类已经有一个静态方法,它将为您返回一系列值 - 可能更简单地使用这些语义.


Mit*_*nca 5

这是其中一种方法:

static void Main(string[] args)
    {
        int[] allNumbers = Enumerable.Range(1, 20).ToArray();
        GetNumbers(ref allNumbers, new int[] { 16, 17 });
    }

    private static void GetNumbers(ref int[] nums, int[]exclude)
    {
        List<int> numsToExlucde =new List<int>();
        numsToExlucde.InsertRange(0, exclude);
        nums = nums.Where(w => !numsToExlucde.Contains(w)).ToArray();
    }
Run Code Online (Sandbox Code Playgroud)


小智 -9

您需要遍历禁止范围并在此过程中迭代创建有效范围。

public List<Range> getValidRanges(Range total, List<Range> banned)
{
  List<Range> valid = new ArrayList<Range>();
  int start = total.getStartTime();
  for(Range range: banned)
   {
     valid.add(new Range(start,banned.getStart()));
     start = banned.getEnd();
   }
   valid.add(new Range(start,total.getEnd()));
   return valid;
}
Run Code Online (Sandbox Code Playgroud)

  • 无论如何,这段代码都不是有效的 C# 代码。 (11认同)