Найти индекс минимального свойства в части коллекции

#c# #collections #minimum

#c# #Коллекции #минимальный

Вопрос:

У меня есть панель классов:

 public class Bar
{
    public string Symbol { get; set; }
    public DateTime DateTime { get; set; }
    public double Open { get; set; }
    public double High { get; set; }
    public double Low { get; set; }
    public double Close { get; set; }
    public int Volume { get; set; }
}
  

и коллекция

 minDataCollection<Bar>
  

Я пытаюсь найти индекс строки с наименьшим значением.Низкий в пределах «ширины» столбцов, начинающихся на n баров назад от текущего столбца.
Проблема в том, что если я создам другую коллекцию размера «ширина» и найду минимум, я потеряю связь с индексами основной коллекции.

Комментарии:

1. Является ли ‘minDataCollection’ классом, который вы написали?

2. minDataCollection<Bar> — это наблюдаемая коллекция

3. Что плохого в добавлении индекса начального элемента к индексу найденного элемента подсписка?

4. Если я найду минимальное значение с помощью List.Min(); Я узнаю только минимальное значение. Теперь, как я могу получить индекс? Я не нашел ни одного простого метода.

Ответ №1:

Вы можете использовать LINQ Select -с-индексом, а затем MinBy из MoreLINQ:

 var index = collection.Select((value, index) => new { value, index })
                      .MinBy(pair => pair.value.Low).index;
  

Комментарии:

1. Я новичок в программировании (хотя я изучил 4 толстые книги), поэтому я могу ошибаться. Мне кажется, что этот код будет просматривать всю minDataCollection<Bar> для индекса значения с наименьшим «Низким» свойством. Мне нужно проанализировать только несколько баров, которые находятся на расстоянии n баров (к началу коллекции) от текущего бара. Я знаю индекс текущего бара — iCurrBar.

2. @Vitaly: Ах, извините — это было не совсем очевидно. Отредактирую позже — сейчас у меня нет времени.