Как я могу исключить определенные значения (нули) и получить максимальное значение из некоторой группы данных?

#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 #.