Как объединить 2 массива одинаковой длины в один словарь с помощью пар ключ: значение в Godot?

#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. Большое вам спасибо за ответ, и я очень ценю помощь. Я попробовал код, и он отлично работает для того, что мне нужно. Еще раз спасибо!