Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Indeksowanie Tablicy np. Stringiem
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004
Indeksowanie Tablicy np. Stringiem

Witam

Czyli tak:

Ma sobie jakis tam Typ np.

Private Type MojTyp
      sText As String
      sImie As String
      sWiek As String * 2
      ....
End Type

Teraz deklaruję tablicę:

Dim Tablica() As MojTyp

I pytanie jest takie:

"Czy da się jakoś indeksować moją tablicę ale nie Integerami tylko np. zmienną sText??"

Może trzeba to wszystko inaczej zadeklarować a może użyć zupełnie czegoś innego

Próbowałem z Kolekcjami ale tu chyba nie da się dodać nowych pól.

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

06-11-2004 18:57
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Możesz to zrobić właśnie poprzez Collection. Nowe elementy dodajesz metodą .Add .

W przypadku tablicy indeksować tekstem nie możesz, natomiast możesz użyć takiego kodu:

Function GetItem(sIText As String) As MojTyp
    Dim vBuffer As Variant
   
    For Each vBuffer In Tablica
        If vBuffer.sText = sIText Then GetItem = vBuffer
    Next
End Function



_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

06-11-2004 19:36
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Wielkie dzieki

Zrobiłem to troszkę w inny sposób:

Otówż utworzyłem kolekcję, w której Klucz zawiera stringi, którymi chcę indeksować (tzn. każdy element w kolekcji odpowiada jednemu stringowi bo jak wiadomo klucze są unikalne) a Item przypisałem indeks tablicy.

Gdy odwołuję się do tablicy stringiem to odczytuję wartość Item z kolekcji a następnie odczytuję odpowiednie dane z tablicy o indeksie Item

Pozdrawiam.

P.S. A jest jakaś możliwość indeksowania jekiejś struktury np. Stringiem - coś jak kolekcja tylko żebym mógł dodać swoje własne pola (Imię nazwisko itd.) ?


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

06-11-2004 20:09
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Wbudowanej w VB - nie ma.
Natomiast możesz sobie taką napisać.
Tylko dlaczego ci nie pasuje Collection?


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

06-11-2004 21:50
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
Możesz indeksować...

Możesz indeksować  i typ określony przez użytkownika, czyli Twoją strukturę.

Z tego, co zrozumiałem - masz strukturę, a następnie tworzysz tablicę rekordów przechowywanych i zapisywanych poprzez strukturę.

Jeśli wszystkie dane (rekordy) wpiszesz do tablicy, to nie ma problemu z indeksowaniem - podobnie, co sam zauważyłeś - jest z kolekcją.

For i = LBound(tablicaRekordow()) To UBound(tablicaRekordow())
    'odczytaj pole rekordu
    strTmp = tablicaRekordow()
    'coś tam robisz
Next i

Czyli odwołanie się poprzez indeks tablicy daje Ci coś z pseudoindeksowania.
Znając rozmiar tablicy (górny zakres, bo dolny zakres w zależności od Option Base będzie wynosił 0 lub 1) możesz śmiało odwoływać się do wszystkich elementów tablicy - po indeksie tablicy.

Innym problemem jest czy dane w tablicy mają być posortowane, czy nie.


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

07-11-2004 10:18
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

A co będzie jeśli liczba elementów w tablicy tablicaRekordow będzie równa 0?


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

07-11-2004 10:41
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Akurat zrobiłem to tak że rozmiar tablicy (ta ma jeden wymiar) jest zawsze równy ilości elementów w kolekcji

O zabezpieczeniach typu "co będzie jeśli coś to" nie piszę bo w moim przypadku rozmiar tablicy zawsze będzie co najmniej 1

[Post edytowany dnia 07-11-2004 12:08 przez DJK]


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

07-11-2004 12:06
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
Wszystkich odpowiedzi: 6 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1