Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 28 мар 2024, 13:48

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Программная сортировка элементов по коллекции
СообщениеДобавлено: 26 ноя 2018, 19:57 
Не в сети

Зарегистрирован: 26 ноя 2018, 19:44
Сообщений: 4
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Здравствуйте.

есть коллекция:
Set cllShapes = New Collection

которая наполняется элементами строкового вида.
cllShapes.Add "имя1"
cllShapes.Add "имя2"
cllShapes.Add "имя3"
....

подскажите, как можно отсортировать данную коллекцию по именам в порядке убыв. возр.?

спасибо


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Программная сортировка элементов по коллекции
СообщениеДобавлено: 26 ноя 2018, 22:27 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Как мне кажется, проще сортировать при заполнении коллекции, чем потом.
Или перебарсывать с сортировкой в новую коллекцию. Например, так:
Код:
Sub ttt()
    Set cllShapes = New Collection
    cllShapes.Add "имя2"
    cllShapes.Add "имя1"
    cllShapes.Add "имя3"
   
    Dim Sorted As Collection
    Set Sorted = New Collection
    For i = 1 To cllShapes.Count
        Flag = True
        For j = 1 To Sorted.Count
            If cllShapes(i) < Sorted(j) Then
                Sorted.Add cllShapes(i), , j
                Flag = False
                Exit For
            End If
        Next
        If Flag Then
            Sorted.Add cllShapes(i)
        End If
    Next
   
    For i = 1 To Sorted.Count
        Debug.Print Sorted(i)
    Next
End Sub

Для обратной сортировки - поменять знак в сравнении.
Более точно использовать не > , а StrComp. Ну, это в зависимости от ситуации.
Можно еще оптимизировать, но лень...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Программная сортировка элементов по коллекции
СообщениеДобавлено: 27 ноя 2018, 12:04 
Не в сети

Зарегистрирован: 26 ноя 2018, 19:44
Сообщений: 4
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Как мне кажется, проще сортировать при заполнении коллекции, чем потом.
Или перебарсывать с сортировкой в новую коллекцию. Например, так:
Код:
Sub ttt()
    Set cllShapes = New Collection
    cllShapes.Add "имя2"
    cllShapes.Add "имя1"
    cllShapes.Add "имя3"
   
    Dim Sorted As Collection
    Set Sorted = New Collection
    For i = 1 To cllShapes.Count
        Flag = True
        For j = 1 To Sorted.Count
            If cllShapes(i) < Sorted(j) Then
                Sorted.Add cllShapes(i), , j
                Flag = False
                Exit For
            End If
        Next
        If Flag Then
            Sorted.Add cllShapes(i)
        End If
    Next
   
    For i = 1 To Sorted.Count
        Debug.Print Sorted(i)
    Next
End Sub

Для обратной сортировки - поменять знак в сравнении.
Более точно использовать не > , а StrComp. Ну, это в зависимости от ситуации.
Можно еще оптимизировать, но лень...



Спасибо Вам. разобрался


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



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

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


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB