#c#
Вопрос:
Я новичок в C #. Моя проблема в том, что у меня 19 двойных значений. Некоторые из них равны нулю. Я хочу исключить эти нули и найти максимальное значение из оставшихся значений. Как я могу это сделать? Мой код включает только двойные значения.
double m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19;
m1 = 200;
m2 = 1000;
m3 = 1500;
m4 = 2000;
m5 = 4000;
m6 = 7000;
m7 = 10000;
m8 = 12000;
m9 = 14000;
m10 = 16000;
m11 = 0;
m12 = 0;
m13 = 0;
m14 = 0;
Комментарии:
1. С ними было бы легче работать, если бы они были в коллекции (например
List<double>
)2. Почему вас все равно волнуют нули, когда вы ищете максимальное значение? Если они тоже не могут быть отрицательными, но тогда 0 больше -1.
3. Что вы подразумеваете под «устранением»?
4. извините, ребята, я не подумал правильно, мне нужно только максимальное значение. причина, по которой я не использовал список, заключается в том, что эти значения поступают из базы данных access.
5. причина использования нулей находится в моей базе данных, эти 19 значений принадлежат отдельным объектам. некоторые из них имеют 11 значений, но максимум равен 19. поэтому я использовал ноль (потому что я не знаю нулевую операцию в access).
Ответ №1:
Использование отдельных переменных для каждого значения делает задачу очень утомительной, потому что вы должны написать код для каждой из этих переменных. Вставьте значения в коллекцию.
Если у вас есть фиксированный набор значений (например, всегда 19 значений), вы можете использовать массив. Если у вас разное количество значений, используйте список. Я буду использовать список, потому что это более универсальный подход.
var m = new List<double> {
200, 1000, 1500, 2000, 4000, 7000, 10000, 12000, 14000, 16000, 0, 0, 0, 0
};
Теперь вы можете использовать LINQ для обработки значений
double maximumValue = m
.Where(x => x != 0)
.Max();
Метод Where
расширения фильтрует значения. x =>
вводит переменную, которой каждое значение будет присваиваться по очереди. x != 0
это условие, которое будет применяться к каждому из этих значений. Только те, в которых выполняется условие, проходят через фильтр и передаются на следующий этап, который является методом Max
расширения, возвращающим максимальное значение.
Обратите внимание, что фильтр будет иметь эффект, только если у вас есть только отрицательные значения и нули, приводящие к отрицательному максимальному значению. Потому что, если максимум положительный, нули не повлияют на результат.
Если вы знаете, что максимальное значение будет положительным значением, тогда вы можете просто написать
double maximumValue = m.Max();
Комментарии:
1. Конечно, вы можете, но для этого существует множество возможных решений, в зависимости от типа базы данных (Oracle, SQL-Server, MySQL, SQLite, XML, Json и т. Д.) И Технологии доступа к данным (EF, EF-Core, ADO.NET , Щеголеватый и т.д.). Задайте новый вопрос дляэто и дает (намного) больше деталей. Кроме того, для данных, поступающих из БД, вы должны применять функцию MAX на стороне БД, а не в коде C #.