Выбор значения из коллекции по нескольким условиям.

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Выбор значения из коллекции по нескольким условиям.

Сообщение viter.alex » 18.03.2009 (Ср) 9:16

Уже бьюсь третий день, не могу сообразить.
Есть коллекция col. Каждый элемент коллекции имеет свойство Length и Count (т.е. длина и количество)
Нужно найти номер элемента коллекции, который дает минимальную разницу с заданой длиной iLen. Элементы коллекции заведомо меньше либо равны iLen. При этом нужно перебирать только те элементы коллекции, у которых Count>0. Если такие элементы не найдены, то функция возвращает -1
Попробовал сделать наподобие сортировки массива по возрастанию, но не получается.
Код: Выделить всё
Public Function FindFeedStock(ByVal iLen As Double, _
                              ByVal col As Collection) As Integer
  Dim i#, diff As Double, diff1 As Double, j#
  FindFeedStock = -1
  For i = 1 To col.Count
    If col(i).Count > 0 Then
      For j = 1 To col.Count - 1 - i
        If col(j).Count > 0 Then
          diff = iLen - col(j).Length: diff1 = iLen - col(j + 1).Length
          If diff > 0 Then
            FindFeedStock = IIf(diff > diff1 And col(j + 1).Count > 0 And diff1 > 0, j + 1, FindFeedStock)
          End If
        End If
      Next j
    End If
  Next
End Function
Лучше день потерять — потом за пять минут долететь!

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Выбор значения из коллекции по нескольким условиям.

Сообщение MIT » 18.03.2009 (Ср) 10:50

Как-то так:
Код: Выделить всё
   Public Function FindFeedStock(ByVal iLen As Double, ByVal col As Collection) As Integer
        Dim LastIndex As Integer, i As Integer, LastValue As Double
        i = -1

        For Each Item In col
            With Item
                If .Count > 0 Then
                    If .Lenght > LastValue And .Lenght < iLen Then
                        LastIndex = i
                        LastValue = .Lenght
                    End If
                End If
            End With
            i = i + 1
        Next

        FindFeedStock = i
    End Function

Вроде должно работать :)

Added:
Вполне возможно, что условие можно немного изменить:
If .Lenght > LastValue And .Lenght <= iLen Then
или дописать после LastValue = .Lenght что-то типа этого:
Код: Выделить всё
ElseIf iLen = .Lenght Then
    LastIndex = i
   exit for

Это уже на усмотрение автора
Последний раз редактировалось MIT 18.03.2009 (Ср) 11:10, всего редактировалось 10 раз(а).
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Выбор значения из коллекции по нескольким условиям.

Сообщение alibek » 18.03.2009 (Ср) 10:56

Пока не понял, почему в данном разделе.
Lasciate ogni speranza, voi ch'entrate.

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Выбор значения из коллекции по нескольким условиям.

Сообщение viter.alex » 18.03.2009 (Ср) 10:57

MIT писал(а):Как-то так:
Код: Выделить всё
   …
        FindFeedStock = i



Наверное,
Код: Выделить всё
FindFeedStock = LastIndex?
Лучше день потерять — потом за пять минут долететь!

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Выбор значения из коллекции по нескольким условиям.

Сообщение MIT » 18.03.2009 (Ср) 11:00

viter.alex писал(а):Наверное,
Ну да :D
Я код просто не проверял

added:
ну и сначалаLastIndex=-1
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Выбор значения из коллекции по нескольким условиям.

Сообщение viter.alex » 18.03.2009 (Ср) 11:45

Начальное значение i не -1, а 1, ведь это счетчик элементов в коллекции.
Спасибо. Работает. Все очень просто оказалось. :D
Лучше день потерять — потом за пять минут долететь!


Вернуться в Раздел для Профессионалов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList