#arrays #dictionary #merge #godot #gdscript
#массивы #словарь #слияние #godot #gdscript
Вопрос:
Я пытался рандомизировать значения в упорядоченном массиве (например: [0,1,2,3]) в Godot. Для массивов должен быть метод shuffle(), но он, похоже, сломан и всегда возвращает «null». Я нашел обходной путь, который использует перетасовку Фишера-Йейтса, но результирующий массив считается «несортированным» движком, и поэтому, когда я пытаюсь использовать такие методы, как bsearch (), чтобы найти значение по его позиции, результаты в лучшем случае ненадежны.
Моим решением было создать словарь, состоящий из массива, содержащего полученные мной случайные значения, объединенные со вторым массивом равной длины с (отсортированными) числами (в числовом порядке), которые я затем могу использовать в качестве ключей для доступа к определенным позициям массива, когда это необходимо.
Вопрос упрощен…
В GDScript, как бы вы взяли 2 массива .. например: ARRAY1 = [0,1,2,3] ARRAY2 = [a, b, c, d]
..и объединить их, чтобы сформировать словарь, который выглядит следующим образом: MergedDictionary = {0:a, 1:b, 2:c, 3:d}
Любая помощь была бы высоко оценена.
Godot не поддерживает методику «zip» для объединения массивов, такую как Python, поэтому я застрял, объединяя их вручную. Однако… документации о том, как это сделать в GDScript, практически нет, несмотря на мои многочасовые поиски.
Ответ №1:
Попробуйте это:
var a = [1, 2, 3]
var b = ["a", "b", "c"]
var c = {}
if a.size() == b.size():
var i = 0
for element in a:
c[element] = b[i]
i = 1
print("Dictionary c: ", c)
Если вы хотите добавить элементы в словарь, вы можете присвоить значения ключам, как существующим ключам.
Комментарии:
1. Большое вам спасибо за ответ, и я очень ценю помощь. Я попробовал код, и он отлично работает для того, что мне нужно. Еще раз спасибо!