Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / обращение к массиву с текстом вместо индекса / 18 сообщений из 18, страница 1 из 1
26.04.2011, 17:52
    #37234436
celentano
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
Народ, помогите пожалуйста.
В двумерный массив хочу посчитать сумму при условии совпадения названий филиала и вида.
Без прочих циклов и сравнений:

fil = Cells(I, 2)
vid = Cells(I, 3)
pl(fil, vid) = pl(fil, vid) + Cells(I, 1)

Непонятно как объявить массив pl - в виде индексов везде подразумевают только числа.
Спасибо.
...
Рейтинг: 0 / 0
26.04.2011, 18:00
    #37234448
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
создайте коллекцию на основе своего собственного класса. сделайте индекс у коллекции строкового типа
...
Рейтинг: 0 / 0
26.04.2011, 18:08
    #37234462
celentano
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
Konst_One,

не понял - в коллекции нужно перечислять все возможные значения?
Не хотелось бы.
...
Рейтинг: 0 / 0
26.04.2011, 18:14
    #37234475
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
celentanoKonst_One,
не понял - в коллекции нужно перечислять все возможные значения?
Не хотелось бы.

Коллекция - это типа массив, где к элементу возможно обратиться не только по индексу, но и по имени.
Почитайте про них любой онлайн-учебник или хелп - там все предельно просто.
...
Рейтинг: 0 / 0
26.04.2011, 18:55
    #37234547
celentano
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
почитать не помогает, а есть какой-нибудь простой кусочек программы по созданию коллекции?
...
Рейтинг: 0 / 0
26.04.2011, 19:03
    #37234556
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
celentanoпочитать не помогает
Бедааааааа
celentano а есть какой-нибудь простой кусочек программы по созданию коллекции?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub Command1_Click()

Dim MyColl As New Collection

MyColl.Add  5 , "Element1"
MyColl.Add "слово из трех букв", "EsheElement"
MyColl.Add  222 . 333 , "Nu I Vot"

MsgBox "Количество элементов коллекции: " + CStr(MyColl.Count)
MsgBox "Второй элемент коллекции: " + CStr(MyColl( 2 ))
MsgBox "Элемент коллекции с ключом 'Nu I Vot': " + CStr(MyColl("Nu I Vot"))

End Sub
...
Рейтинг: 0 / 0
26.04.2011, 19:39
    #37234597
celentano
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
Shocker.Pro, это одномерная коллекция,
а если у меня двумерный массив, то под второй индекс создавать другую коллекицю?
...
Рейтинг: 0 / 0
26.04.2011, 19:43
    #37234602
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
celentanoShocker.Pro, это одномерная коллекция,
а если у меня двумерный массив, то под второй индекс создавать другую коллекицю?

Зачем? Кто мешает использовать двойной индекс в одном? Это же текстовая строка, туда можно че угодно запихать (единственное ограничение - не может ключ начинаться с цифры)
Код: plaintext
MyColl("Index1,Index2")
Впрочем, в коллекцию можно добавлять в качестве элемента любой объект, в том числе другую коллекцию, это тоже никто не запрещает. Но не вижу большого смысла в этом.
...
Рейтинг: 0 / 0
26.04.2011, 20:12
    #37234634
celentano
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
Shocker.Pro,

а вот если сцепка fil_vid повторяется, то нарушение уникальности индекса )
Вообще как то так или вообще не так?)

Dim fil_vid As New Collection
n = Cells(15, 1).End(xlDown).Row
For I = 15 To n
fil_vid.Add Cells(I, 2), Cells(I, 2) & " " & Cells(I, 3)
Next I

For I = 15 To n
fil_vid(fil & " " & vid) = fil_vid(fil & " " & vid) + Cells(I, 11)
Next I
...
Рейтинг: 0 / 0
26.04.2011, 20:39
    #37234662
обращение к массиву с текстом вместо индекса
celentano,
зачем в два прохода? Добавляйте сразу сумму...
Код: plaintext
1.
2.
3.
4.
5.
Dim fil_vid As New Collection
n = Cells( 15 ,  1 ).End(xlDown).Row
For I =  15  To n
fil_vid.Add Cells(I,  2 ) + Cells(I,  11 ), Cells(I,  2 ) & " " & Cells(I,  3 )
Next I
почему именно в коллекцию?
ЗЫ: про нарушение уникального индекса - это Вы здорово!
...
Рейтинг: 0 / 0
27.04.2011, 00:40
    #37234919
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
celentanoа вот если сцепка fil_vid повторяется, то нарушение уникальности индекса
А что, в двумерном массиве у тебя тоже бывают нарушения уникальности индекса? :))
...
Рейтинг: 0 / 0
27.04.2011, 09:57
    #37235206
celentano
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
Shocker.Pro,

This key is already associated with an element of this collection
Я так понял что создаваемый мною текстовый ключ (который вместо индекса) повторяется
...
Рейтинг: 0 / 0
27.04.2011, 11:05
    #37235320
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
celentanoShocker.Pro,

This key is already associated with an element of this collection
Я так понял что создаваемый мною текстовый ключ (который вместо индекса) повторяется
Ключ, КАК И ИНДЕКС обычного массива , естественно повторяться не может, иначе как ты обратишься к нужному тебе элементу массива?

Похоже, ты не совсем верно обозначил себе метод решения своей задачи. То есть как работать с текстовыми индексами я тебе подсказал, но на самом деле требуется нечто другое
...
Рейтинг: 0 / 0
28.04.2011, 11:41
    #37237629
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
Гм.. Гм.. > Автор: Shocker.Pro
> (единственное ограничение - не может ключ начинаться с цифры)


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub dsf()
Dim mColl As New Collection, i As Long

For i =  1  To  10 
    mColl.Add i, CStr(i)
Next i
For i =  1  To  10 
    Debug.Print CStr(mColl.Item(i))
Next i

End Sub
Я бы перефразировал: Так как ключ - строка, то попытка задать ключ числом, не преобразованным в строку вызовет
ошибку


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.04.2011, 11:57
    #37237682
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
Игорь Горбонос,

да, я ошибся
Код: plaintext
1.
2.
Dim a As New Collection
a.Add "[[[", "5S"
MsgBox a("5S")

У меня были проблемы с каким-то контролом типа ImageList или ListView, я думал, это касается всех коллекций
...
Рейтинг: 0 / 0
28.04.2011, 12:01
    #37237704
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
Да, вот такая штуковина не проходит:
Код: plaintext
ListView1.ListItems.Add , "5", "fff"

но
Код: plaintext
ListView1.ListItems.Add , "5s", "fff"
проходит, так что теперь самому неясно, с чего я это взял


А у простой коллекции вообще не наблюдается этой проблемы:
Код: plaintext
1.
2.
3.
Dim a As New Collection
a.Add "[[[", "5"
MsgBox a("5")
MsgBox a( 1 )
...
Рейтинг: 0 / 0
29.04.2011, 13:55
    #37240097
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
Shocker.ProВпрочем, в коллекцию можно добавлять в качестве элемента любой объект, в том числе другую коллекцию, это тоже никто не запрещает. Но не вижу большого смысла в этом.

Ну как сказать - я это неплохо использую - у меня обработка контролов формы на этом с незапамятных времен построена...
...
Рейтинг: 0 / 0
29.04.2011, 20:52
    #37240977
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обращение к массиву с текстом вместо индекса
AndrFНу как сказатья имел ввиду - в данном конкретном случае
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / обращение к массиву с текстом вместо индекса / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]