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

Хорошо, так что вы не можете объявить свой метод «public static abstract» в суперклассе, но вы можете сказать своим коллегам просто включить метод, который «public static» возвращает SuperClass и не принимает аргументов, а затем найти этот метод отражается на вашей фабрике:

public static class Main {
    public static void main(String[] args) {
        List<Class> classes.....// get classes extend from SuperClass by reflection.
        List<SuperClass> res = new ArrayList<>();
        for (Class<?> clazz : classes) {
            for (Method method : clazz.getMethods()) {
                if (isStatic(method) && returnsSuperClass(method) && hasNoParameters(method)) {
                    res.add((SuperClass) method.invoke(null));
                }
            }
        }
    }

    public static boolean hasNoParameters(Method method) {
        return method.getParameterTypes().length == 0;
    }

    public static boolean returnsSuperClass(Method method) {
        return SuperClass.class.isAssignableFrom(method.getReturnType());
    }

    public static boolean isStatic(Method method) {
        return (method.getModifiers() & Modifier.STATIC) == Modifier.STATIC;
    }
}
12
задан Alexis Tyler 23 November 2017 в 06:53
поделиться

6 ответов

Используйте хеш-таблицу и сделайте это:

// Initialise the set

mySet = {};

// Add to the set

mySet["some string value"] = true;

...

// Test if a value is in the set:

if (testValue in mySet) {
     alert(testValue + " is in the set");
} else {
     alert(testValue + " is not in the set");
}
20
ответ дан 2 December 2019 в 03:49
поделиться

Комментарий к вышеупомянутым решениям для хеша. На самом деле {} создает объект (также упомянутый выше), который может привести к некоторым побочным эффектам. Один из них - то, что Ваш "хеш" уже предварительно заполняется с методами объекта по умолчанию.

Так "toString" in setOfValues будет true (по крайней мере, в Firefox). Можно предварительно ожидать другой символ, например,"." к строкам, чтобы работать вокруг этой проблемы или использовать объект Хеша, обеспеченный "опытной" библиотекой.

5
ответ дан 2 December 2019 в 03:49
поделиться

Можно использовать объект как так:

// prepare a mock-up object
setOfValues = {};
for (var i = 0; i < 100; i++)
  setOfValues["example value " + i] = true;

// check for existence
if (setOfValues["example value 99"]);   // true
if (setOfValues["example value 101"]);  // undefined, essentially: false

Это использует в своих интересах то, что объекты реализованы как ассоциативные массивы. Как быстро, который является, зависит от Ваших данных и реализации механизма JavaScript, но можно сделать некоторое тестирование производительности легко для сравнения с другими вариантами выполнения его.

Если значение может произойти несколько раз в Вашем наборе и, "как часто" важно для Вас, можно также использовать число постепенного увеличения вместо булевской переменной, которую я использовал для своего примера.

8
ответ дан 2 December 2019 в 03:49
поделиться

Возможный путь, особенно эффективный, если набор неизменен, но все еще применим с переменным набором:

var haystack = "monday tuesday wednesday thursday friday saturday sunday";
var needle = "Friday";
if (haystack.indexOf(needle.toLowerCase()) >= 0) alert("Found!");

Конечно, Вы, возможно, должны были бы изменить разделитель в зависимости от строк, которые необходимо поместить там...

Более устойчивый вариант может включать границы для обеспечения ни "дня, связанного узами брака", ни "дня", может соответствовать положительно:

var haystack = "!monday!tuesday!wednesday!thursday!friday!saturday!sunday!";
var needle = "Friday";
if (haystack.indexOf('!' + needle.toLowerCase() + '!') >= 0) alert("Found!");

Могло бы быть не нужным, если вход уверен (например, из базы данных, и т.д.).

Я использовал это в сценарии Механика с преимуществом использования стога сена непосредственно из устройства хранения данных GM.

2
ответ дан 2 December 2019 в 03:49
поделиться

Используя хеш-таблицу могла бы быть более быстрая опция.

Безотносительно опции Вы идете для, который определенно стоит проверить ее производительность против альтернатив, которые Вы рассматриваете.

0
ответ дан 2 December 2019 в 03:49
поделиться

Зависит от сколько значений, там.

Если существует несколько значений (меньше чем 10 - 50), перерывая массив могут быть в порядке. Хеш-таблица могла бы быть излишеством.

Если у Вас есть много значений, хеш-таблица является наилучшим вариантом. Требуется меньше работы, чем сортировка значений и выполнение двоичного поиска.

0
ответ дан 2 December 2019 в 03:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: