Получить максимальное значение 3 элементов из списка

У меня проблема. Я создал список, который выглядит так:

public class SelectedTriangleRegistryObject
{
    public float x1 { get; set; }
    public float y1 { get; set; }
    public float x2 { get; set; }
    public float y2 { get; set; }
    public float x3 { get; set; }
    public float y3 { get; set; }
    public int TriangleNum { get; set; }
    public int SequenceNum { get; set; }
}

Теперь я хочу выбрать максимальное значение координат x. Таким образом, наибольшее число, но это может быть либо x1, либо x2, либо x3. Просто самое высокое значение из 3. Как я могу это сделать?

Я знаю эту строку:

float XMaxShapeValue = triangles.Max(x => x.x3);

Но знайте, что я хочу что-то вроде этого:

float XMaxShapeValue = triangles.Max(x => x.x1, x.x2, x.x3);

Как я могу это сделать?

ПРИМЕР:

x1 имеет значения [2,4,5]
x2 имеет значения [2,5,3]
x3 имеет значения [4,6,1]

Затем я хочу получить число 6. Но вы не знаете, у какого x самое большое число!

Что такое 3 вместе? Их сумма? Max(x => x.x1 + x.x2 + x.x3)?

Camilo Terevinto 22.05.2019 16:53

Напишите статический метод public static T Max<T>(params T[] args) => args.Max();. Или добавьте свойство public double MaxX => new[] { x1, x2, x3 }.Max();

15ee8f99-57ff-4f92-890c-b56153 22.05.2019 16:53

Нет, наибольшее число x1, x2 или x3. Это зависит от того, кто выше....

A. Vreeswijk 22.05.2019 16:54
Math.Max(a, Math.Max(b,c)) ?
Marc Gravell 22.05.2019 16:55

@A.Vreeswijk Как мы знаем из математики, максимальная операция ассоциативна, то есть max(a, b, c) равно max(a, max(b, c)). Просто используйте Math.Max дважды.

Yeldar Kurmangaliyev 22.05.2019 16:55

Я добавил пример к вопросу!

A. Vreeswijk 22.05.2019 16:58

Итак, x1, x2 и т. д. должны быть массивами?

TheChubbyPanda 22.05.2019 16:59

@A.Vreeswijk Вы хотите вернуть значение с плавающей запятой или объект SelectedTriangleRegistryObject, который имеет это максимальное значение? Если вы хотите объект, что вы делаете в случае ничьей?

dvo 22.05.2019 17:00

Нет, но список имеет несколько индексов!

A. Vreeswijk 22.05.2019 17:00

Наибольшее число, неважно, какой x оно имеет. Просто самое большое число

A. Vreeswijk 22.05.2019 17:00

@MarcGravell Уже дал вам ответ ... И этот пример ужасен, он представляет три списка, а не один

Camilo Terevinto 22.05.2019 17:03
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
11
265
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Примените предложения из комментариев, чтобы использовать два оператора Math.Max в вашем запросе LINQ:

float XMaxShapeValue = triangles.Max(t => Math.Max(t.x1, Math.Max(t.x2, t.x3)));

Это вернет значение float максимального X независимо от того, является ли оно x1, x2 или x3. Это не вернет объект треугольника, который на самом деле имеет максимальное значение X.

Чтобы найти максимум в массивах с плавающей запятой:

float[] x1 = {1, 2, 3};
float[] x2 = {2, 3, 4};
float[] x3 = {3, 4, 5};

float max(float[]...floatArrays) {
    max = Float.MIN;
    foreach (float[] floats in floatArrays) {
        foreach (f in floats) {
            max = Math.Max(float, max);
        }
    }
    return max;
}

Я не очень понимаю вопрос, но на вашем примере это то, что вы хотите.

float — это ключевое слово, и вы не можете использовать его в качестве имени переменной.
phuclv 22.05.2019 17:15

ой, мой плохой!

TheChubbyPanda 22.05.2019 17:15

Другие вопросы по теме