我有一个数字间隔[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类已经有一个静态方法,它将为您返回一系列值 - 可能更简单地使用这些语义.
这是其中一种方法:
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)