Как использовать лямбда-выражение в C# для обработки матрицы LinkedList <Object>? - PullRequest
2 голосов
/ 05 января 2020

Я новичок в лямбда-выражениях (C#) и хотел бы помочь с проблемой:

У меня есть матрица, представляющая собой LinkedList объектов. Каждый объект содержит 3 натуральных числа. V1, V2 и V3.

1) Рассчитайте абсолютное значение V1-V2, V2-V3 и V1-V3 для каждой строки (LinkedList) в матрице.

2) Найдите Наивысший из каждого вычисления ABS для каждой строки.

3) Возвращает среднее значение наибольшего из всех строк.

Я могу решить эту проблему с помощью логических операторов и временных списков. В своем стремлении быть знатоком лямбда-выражений я надеюсь, что лямбда-выражение может решить эту проблему.

Заранее спасибо!

prenone request:

LinkedList<Stock> stockLL = new LinkedList<Stock>();

class Stock
{

    protected int _date;
    protected double _open;
    protected double _close;
    protected double _high;
    protected double _low;
    protected int _volume;


    public int date { get => _date; private set => _date = value; }
    public double open { get => _open; private set => _open = value; }
    public double close { get => _close; private set => _close = value; }
    public double high { get => _high; private set => _high = value; }
    public double low { get => _low; private set => _low = value; }
    public int volume { get => _volume; private set => _volume = value; }


    public Stock(int date, double open, double close, double high, double low, int volume)
    {
        _date = date;
        _open = open;
        _close = close;
        _high = high;
        _low = low;
        _volume = volume;

    }
}

Не уверен, что это важно, но если вам интересно. V1 = "высокий", V2 = "низкий" и V3 = это открытие предыдущего дня. Расчет заключается в расчете среднего истинного диапазона инструмента. Я упростил свой вопрос, чтобы уравновесить меня, возможно, путая читателя с моей способностью самостоятельно разобраться с остальными.

    public double High(LinkedList<Stock> stockLL) //High and Low here are unrelated to the high and low in the ATR calc. I'm just showing them as an example of my first lambdas.
    {
        return stockLL.Max(t => t.high);
    }

    public double Low(LinkedList<Stock> stockLL)
    {
        return stockLL.Min(t => t.low);
    }

    public double ATR(LinkedList<Stock> stockLL)
    {

        Insert Genius Lambda Here!

        return 
    }

1 Ответ

4 голосов
/ 06 января 2020

Примерно так:

public double ATR(LinkedList<Stock> stockLL)
{
    return stockLL.Select(stock => new[]
            {
                Math.Abs(stock.high - stock.low),
                Math.Abs(stock.low - stock.open),
                Math.Abs(stock.open - stock.high)
            }.Max())
        .Average();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...