Правильный вызов данных из коллекции

156
08 апреля 2022, 16:10

Объясните мне, а то не врублюсь, как будет быстрее и лучше, и почему:

Так:

A = C.B["A"].GetComponent<Button>();
F = C.B["F"].GetComponent<Button>();
B = C.B["B"].GetComponent<Button>();
H = C.B["H"].GetComponent<Button>();

Или так:

C = C.B;
A = C["A"].GetComponent<Button>();
F = C["F"].GetComponent<Button>();
B = C["B"].GetComponent<Button>();
H = C["H"].GetComponent<Button>();

Или оба варианты равны?

C.B - это коллекция new Dictionary<string, GameObject>();

Answer 1

Самое дорого здесь это GetComponent. Лучше ваши кнопки закешировать в словаре, если так надо. Dictionary. То, о чем, вы думаете - по времени выполнения даст разницу, несоизмеримо маленькую, по сравнению с вызовом GetComponent.

А вообще, что мешает самому проверить, что здесь будет быстрее?

Answer 2

Я вообщем понял, бессмысленно использовать для этого Dictionary и GetComponent.
Так как естьTransform, мы можем в скрипте вызвать индекс transform.GetChild(index).

public static Transform Transform(string Name) {
    Transform tm = c.transform;
    for (int i = 0; i < tm.childCount; ++i) {
        Transform child = tm.GetChild(i);
        if (child.name.Equals(Name, StringComparison.OrdinalIgnoreCase)) {
            return child;
        }
    }
    return null;
}
public static Transform Transform(GameObject Object, string Name) {
    Transform tm = Object.transform;
    for (int i = 0; i < tm.childCount; ++i) {
        Transform child = tm.GetChild(i);
        if (child.name.Equals(Name, StringComparison.OrdinalIgnoreCase)) {
            return child;
        }
    }
    return null;
}

По этому создавать еще одну промежность в виде Dictionary<string,GameObject>, а после еще и GetComponent, никакого смысла нет.

Другое дело, на сколько быстро будет работать Equals и есть ли решения лучше, для сравнения строк, не вариант: child.name == Name.

READ ALSO
Принцип подстановки Лисков

Принцип подстановки Лисков

Принцип, описывает 3 правила:

171
Как сформировать модель что б обращаться через свойства а не масcивы. С#

Как сформировать модель что б обращаться через свойства а не масcивы. С#

Хочу сформировать модель таким образом что б при возвращение на клиент я обращался через точку и свойство а не через номер в массивеПример

138
IoC в WPF по правилам MVVM

IoC в WPF по правилам MVVM

Постепенно начал изучать IoC и всю эту кухню и вот не как не могу понять, как работать с ними в WPF приложение по правилам MVVM

154