VBS Array самым простым способом

Я не могу создать неопределенный массив в VBS.

Это должно быть столько, сколько нужно. Я не хочу объявлять какое-то ограничение вроде 10 или около того для Dim arrnode(10). Мне нужен безлимитный.

Я старался:

Dim arrnode    
arrnode(1) = "a"     
arrnode(2) = "b"     
arrnode(3) = "c"     
arrnode(4) = "d" 

И множество вариаций вроде:

Dim arrnode()   
Dim arrnode() As Variant
Dim arrnode() As Variant()

И т. Д. И т. Д. Ничего из этого не работает. Только ошибки.

Приведите пример, который работает. Я не ищу объяснений, так как не могу понять «вариантное» объяснение, которое я постоянно находил в Интернете. Мне просто отчаянно нужен очень простой работающий массив.

Я нашел три дубликата. Если бы вы прочитали Как спросить перед публикацией, вы бы натолкнулись хотя бы на один из них при поиске.

user692942 12.08.2018 13:59
data = Array(00,01,02,03,04,05,06). Не нужен Dim data
Zimba 27.05.2020 05:04
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
2
4 669
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Есть разные способы создания массивов в VBScript

Массивы определенного размера

Dim arrTest1(3)
arrTest1(0) = "1"
arrTest1(1) = "2"
arrTest1(2) = "3"
arrTest1(3) = "4"

Массивы без определенного размера

Dim arrTest2()
ReDim arrTest2(3)
arrTest2(0) = "1"
arrTest2(1) = "2"
arrTest2(2) = "3"
arrTest2(3) = "4"

Использование функции Array для создания массива

Dim arrTest3
arrTest3 = Array ("1", "2", "3", "4")

В VBScript массивы начинаются с нуля, и вы не можете определить тип переменной (например, as Variant) при объявлении массивов.

Вы можете использовать второй вариант, если не уверены в размере массива. Вы всегда можете ReDim позже изменить его размер. Не забудьте использовать ключевое слово Preserve, если вы хотите защитить данные массива, если вы ReDiming.

Спасибо за быстрый ответ. Кажется, так или иначе придется определять размер. Странно то, что однажды я разделил строку на 2 части на переменную x с помощью команды Split, и я автоматически получил массив с x (0) и x (1). Я никогда не делал тусклый X () или что-то в этом роде. Таким образом, создание массива оказалось намного проще, чем ожидалось, кажется довольно сложным. Мне просто нужно создать Const в начале скрипта, чтобы определить размер массива. Я сдаюсь!

Geoff Vane 10.08.2018 14:00
Split вернет массив. Вы можете создать сценарий, в котором вы можете спросить пользователей, сколько значений они хотят ввести, и создать на основе этого массив. Или используйте более гибкие объекты Dictionary.
Pankaj Jaju 10.08.2018 14:02

Большинство людей используют словари вместо массивов.

CatCat 11.08.2018 21:52

Вы просто извергаете старые ответы, вместо этого помечаете их как повторяющиеся и двигаетесь дальше.

user692942 12.08.2018 14:00

Чтобы создать статический (неизменяемый) массив с 10 слотами, используйте

Dim arr(9)

Для создания динамического (изменяемого размера) массива с 10 слотами используйте

ReDim arr(9)

В каждом случае аргументом является верхняя граница массива. Поскольку массивы VBScript начинаются с нуля (индексы начинаются с 0), это количество элементов минус один.

Если вы хотите добавить массив, не зная заранее требуемый размер, создайте его как пустой динамический массив:

ReDim arr(-1)

Для добавления к этому массиву вам нужно сначала увеличить его размер:

ReDim Preserve arr(UBound(arr)+1)
arr(UBound(arr)) = "a"

ReDim Preserve arr(UBound(arr)+1)
arr(UBound(arr)) = "b"

...

Вы можете обернуть это процедурой, чтобы немного упростить обработку:

Sub AppendToArray(ByRef a, v)
    ReDim Preserve a(UBound(a)+1)
    a(UBound(a)) = v
End Sub

AppendToArray arr, "a"
AppendToArray arr, "b"
...

Однако помните, что изменение размера массива при сохранении его содержимого - медленная операция, потому что VBScript создает новый массив с увеличенным размером, перемещает содержимое существующего массива, а затем заменяет существующий массив новым.

В противном случае VBScript не поддерживает динамическое добавление к массиву. В качестве альтернативы вы можете использовать класс System.Collections.ArrayList, который поддерживает динамическое изменение размера:

Set arr = CreateObject("System.Collections.ArrayList")

arr.Add "a"
arr.Add "b"
...

Спасибо за быстрый ответ. Мне придется поработать с этими инструментами. Было бы неплохо поместить в начало скрипта константу, объявляющую размер массива. Пока dim (c) не работает. Может ReDim жрет константу.

Geoff Vane 10.08.2018 14:14
Dim работает только с литералами. Но, как я уже писал, размер результирующего массива все равно нельзя будет изменить, так что это не то, что вам нужно. ReDim также работает с переменными и константами.
Ansgar Wiechers 10.08.2018 14:17

Я как раз приводил пример использования словаря в качестве объекта, подобного массиву, а потом увидел ваш пост. ArrayList действительно был бы лучшим способом. +1

Tim 10.08.2018 16:41

@Tim не нужно, когда можно было просто посмотреть на один из существующие(кстати, Ансгар, это связывает одного из ваших).

user692942 12.08.2018 14:02

Другие вопросы по теме