Страницы: 1
RSS
порядковый номер элемента коллекции
 
может легкий вопрос, но не могу понять как получить порядковый номер элемента коллекции (item), зная значение ключа этого элемента  
например:  
Mycol.add "1", "1a"  
Mycol.add "1", "1б"  
Mycol.add "1", "1с"  
как определить что элемент коллекции с ключем "1с" третий?  
актуальный вопрос и для dictionary
 
Только перебором. Тот же вопрос:  
http://www.codeguru.com/forum/showthread.php?t=20605
 
подтвердились опасения(  
спасибо за ссылку  
в dictionary тоже только перебором?
 
Можно, если позаботиться об этом при заполнении коллекции.  
 
Sub Test()  
   
 Dim MyCol As New Collection, a(1 To 2), i  
   
 a(1) = 1: a(2) = 101:  MyCol.Add a, "1а"  
 a(1) = 2: a(2) = 102:  MyCol.Add a, "1б"  
 a(1) = 3: a(2) = 103:  MyCol.Add a, "1с"  
   
 Debug.Print "ByKey", MyCol("1б")(1), MyCol("1б")(2)  
   
 i = MyCol("1б")(1)  
 Debug.Print "ByIndex", MyCol(i)(1), MyCol(i)(2)  
   
End Sub
 
спасибо большое, ZVI    
подсказали решение задачи и значительно расширили мои познания о коллекциях
 
Спасибо, ZVI!Отличное дополнение.
 
Угу. А потом возникнет вопрос "как получить значение ключа элемента коллекции, зная порядковый номер этого элемента".  
Будем третий элемент в массив элемента дописывать?  
Зачем тогда вообще коллекция? Используйте массив!
 
{quote}{login=Казанский}{date=17.01.2011 11:38}{thema=}{post}А потом возникнет вопрос "как получить значение ключа элемента коллекции, зная порядковый номер этого элемента".Будем третий элемент в массив элемента дописывать?{/post}{/quote}  
Алексей, это легко делается с Dictionary, с ранним связыванием (требуется установить галку в VBE - Tools - References - Microsoft Scripting Runtime).  
 
Sub Test1()  
   
 ' Нужно установть ссылку (Tools-References)  
 ' на Microsoft Scripting Runtime  
   
 Dim Dic As New Dictionary, i&  
   
 ' Заполнить словарь, сначала ключ, затем - значение (в коллекциях - наоборот)  
 Dic.Add "1а", 0  
 Dic.Add "1б", 1  
 Dic.Add "1с", 2  
     
 ' Теперь можно по индексу (начинается с нуля) прочитать ключ и значение  
 Debug.Print "ByIndex", "Key=" & Dic.Keys(1), "Value=" & Dic.Items(1)  
   
 ' Прочитать по индексу все ключи и значения словаря  
 For i = 0 To Dic.Count - 1  
   Debug.Print i, "Key=" & Dic.Keys(i), "Value=" & Dic.Items(i)  
 Next  
   
 Set Dic = Nothing  
   
End Sub
 
Спасибо, Владимир, мож когда пригодится.
Страницы: 1
Читают тему
Loading...