Как использовать массив, чтобы выбрать диапазон чисел, а затем желаемый результат?
Например, если бы я хотел создать программу, которая дает человеку скидку в зависимости от того, сколько у него предметов. Если они будут покупать 0-5 предметов, они не получат скидку. Если они покупают 5-10 предметов, они получают скидку 5%, если они получают 10-20 предметов, они получают скидку 10% и так далее. Как я могу использовать массив, чтобы разобраться в этом вместо многих операторов "If"?
2 ответа
Вы можете поддерживать массив для представления диапазонов, которые вы дали. Я говорю о хранении как.... скажем, имя массива это массив, а затем массив [0]=5, т.е. максимальное значение первого интервала. затем массив [1]=10 макс. значений второго интервала и действуйте таким же образом. так как этот массив, который вы только что поддержали, будет содержать только небольшое количество значений, так что никаких проблем с производительностью при линейном поиске. Теперь, если numberOfOrderedItems меньше, чем value_of_array, вы можете разорвать цикл и решить, какую скидку вы хотите дать.
Если вы поддерживаете огромное количество дисконтных интервалов, тогда используйте линейный поиск вместо бинарного.
Как насчет того, чтобы начать со структуры для хранения границ и скидок:
public struct DiscountSpec
{
public int MinItems{get;set;}
public int MaxItems{get;set;}
public double Discount{get;set;}
}
положить в массив
DiscountSpec[] discounts = new DiscountSpec[]
{
new DiscountSpec(){MinItems=0,MaxItems=5,Discount=0},
new DiscountSpec(){MinItems=5,MaxItems=10,Discount=0.05},
new DiscountSpec(){MinItems=10,MaxItems=20,Discount=0.10},
}
И тогда магия
int numItemsPurchased=7;
var discount = discounts.Where(
d => d.MinItems<numItemsPurchased && d.MaxItems>=numItemsPurchased)
.Select(d => d.Discount)
.FirstOrDefault();
Сейчас, discount
будет содержать либо 0
(без скидки) или 0.05
(Скидка 5%) или 0.1
(Скидка 10%). Это может быть расширено с другими скидками, если это будет необходимо.
Живой пример: http://rextester.com/YDOWS85239