我有一個包含最小值和最大值串列的輸入型別。我需要找出給定數字所屬的給定值。DTO 看起來與此類似
public class FeeDTO
{
public List<IndividualFee> Fees { get; set; }
}
public class IndividualFee
{
public int MinValue { get; set; }
public int? MaxValue { get; set; }
public string DiscountValue {get;set;}
}
例如,這個輸入就可以了,因為所有范圍都是互斥的:
Range 1: Min = 0 Max = 100 Discount = 20
Range 2: Min = 101 Max = 200 Discount = 30
Range 3: Min = 201 Max = 300 Discount = 40
Range 3: Min = 301 Max = null Discount = 50
現在,如果我有一個數字,比如 101,我想要我可以檢索的折扣 30,對于一個數字,比如 302,我應該能夠獲得 50。
我嘗試對集合進行排序,然后先檢查最高值,然后通過 >= 進行檢查,我能夠得到結果,但只是想知道是否有更好的有效方法,而不是單獨回圈遍歷所有值。
謝謝
uj5u.com熱心網友回復:
使用您的示例,我想出了一個使用List.Find以下解決方案的解決方案:
IndividualFee fee1 = new IndividualFee() { MinValue = 0, MaxValue = 100, DiscountValue = @"20" };
IndividualFee fee2 = new IndividualFee() { MinValue = 101, MaxValue = 200, DiscountValue = @"30" };
IndividualFee fee3 = new IndividualFee() { MinValue = 201, MaxValue = 300, DiscountValue = @"40" };
IndividualFee fee4 = new IndividualFee() { MinValue = 301, MaxValue = null, DiscountValue = @"50" };
List<IndividualFee> list = new List<IndividualFee>();
list.Add(fee1);
list.Add(fee2);
list.Add(fee3);
list.Add(fee4);
int inputNumber = 101;
string discount = list.Find(f => inputNumber >= f.MinValue && inputNumber <= f.MaxValue).DiscountValue;
Console.WriteLine(discount);
uj5u.com熱心網友回復:
使用Enumerable.Range似乎是一個可能的解決方案。嘗試這樣的事情:
int price = 30;
if (Enumerable.Range(min ,max).Contains(price)){
// give discount
}
更多關于Enumerable.Range - https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.range?view=net-5.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/341586.html
