Как проверить есть ли в массиве элемент с указанным значением

Содержание
  1. Website-create.ru
  2. Проверка наличия значения в массиве. Функция in_array()
  3. Проверка наличия значения в массиве. Функция array_search()
  4. Поиск значения в многомерном массиве
  5. Проверьте, присутствует ли значение в массиве в Java
  6. Как проверить, содержит ли массив значение в JavaScript?
  7. Метод Native Array (начиная с ES2016) ( таблица совместимости )
  8. Как пользовательский метод Array (до ES2016)
  9. Простая функция
  10. Тест производительности
  11. Вариант прототипа массива
  12. Как это возможно?
  13. Как определить, содержит ли массив определенное значение в Java?
  14. 27 ответов
  15. С java-8
  16. пример
  17. пример:
  18. Пример:
  19. Как проверить, находится ли элемент в массиве
  20. 14 ответов
  21. проверьте, существует ли элемент в массиве (удовлетворяющий некоторым критериям),и если да, продолжайте работать с первым таким элементом
  22. проверьте, существует ли элемент в массиве (удовлетворяющий некоторым критериям),и если да, удалите первый такой элемент

Website-create.ru

Зачастую при написании кода необходимо проверить существует ли то или иное значение элемента в массиве. Сегодня мы рассмотрим несколько функций, при помощи которых это можно сделать.

Проверка наличия значения элемента в массиве может применяться при решении различных задач в программировании.

Мы можем получать различные массивы из нашей базы данных и проверять наличие того или иного значения в нем. Искомое значение может передаваться и от пользователя нашего скрипта, когда он, например, что-то ищет. По результатам такого поиска можно совершать определенные действия. Все зависит от конкретно поставленной задачи, однако, алгоритмы поиска значения в массиве будут одними и теми же.

Сегодня мы их рассмотрим.

Проверка наличия значения в массиве. Функция in_array()

Функция in_array() позволит нам проверить наличие какого-либо значения в массиве.

Если результат ее работы удачный и искомый элемент в массиве найден, то функция вернет true, то есть «правду».

Также нужно помнить, что функция осуществляет сравнение с учетом регистра символов.

Давайте рассмотрим работу этой функции на простом примере.
Нам нужен какой-нибудь массив. При помощи функции проверим наличие значения в массиве и выведем на экран определенное сообщение.

Отработав функция выведет на экран сообщение «Yes», так как элемент «Marina» в нашем массиве присутствует.

Поменяйте первый параметр в функции на какой-либо несуществующий элемент, и Вы увидите сообщение «No».

Проверка наличия значения в массиве. Функция array_search()

Существует и еще одна функция для поиска array_search(), которая в отличие от предыдущей будет возвращать ключ найденного элемента. Это в свою очередь может пригодиться, если мы работаем с ассоциативным массивом.

Функция принимает те же параметры, что и предыдущая. При этом третий параметр также является необязательным.

Давайте посмотрим, как ее можно использовать, работая с ассоциативным массивом.

В данном случае мы увидим на экране «name», то есть ключ от искомого элемента со значением «Mila».

Эти две функции очень похожи и по сути отличаются только возвращаемым значением.

Поиск значения в многомерном массиве

А что делать, если мы работаем с многомерным массивом? Ведь его элементами будут другие массивы.

Здесь уже рассмотренные нами алгоритмы не сработают.

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

Допустим у нас есть многомерный массив. Его непосредственными значениями являются другие массивы, в которых может содержаться искомое значение элемента.

Все, что требуется сделать – это перебрать элементы первоначального массива в цикле foreach(). Каждый элемент этого массива будет разобран на ключ ($key) и значение ($value).

Значением будет являться каждый из массивов, находящийся внутри основного многомерного массива. Вот с этими значениями мы и будем работать, ища в каждом внутреннем массиве искомое значение элемента.

При нахождении мы выведем на экран сообщение о том, что такой элемент существует, а если нет, то выведем другое сообщение, что такого элемента нет.

Давайте посмотрим все это на примере кода:

Как Вы видите, вначале мы объявляем сам многомерный массив.

При этом здесь обязательно нужно писать не просто знак равенства, а «.=».

Как Вы поняли, итогом работы этого кода будет сообщение «OK! Element here!».

Попробуйте поменять искомый элемент на несуществующий и Вы увидите сообщение «No have element!».

Конечно же, при нахождении или не нахождении определенного элемента мы можем не просто выводить сообщения, а делать какие-либо другие действия. Все зависит от того, что Вам нужно сделать. Например, при наличии искомого значения в массиве, Вы можете отдавать пользователю какую-то конкретную информацию и т.д.

Вот и все на сегодня! Надеюсь, урок был понятен и полезен! Попробуйте сами написать подобный код, чтобы разобраться во всем окончательно.

А я жду Ваших комментариев.

Делитесь уроком со своими друзьями при помощи кнопок соц. сетей, расположенных ниже. А также подписывайтесь на обновления блога. Мы уже собрали достаточно неплохой архив полезных материалов, и они будут только пополняться!

Источник

Проверьте, присутствует ли значение в массиве в Java

Для данного массива задача состоит в том, чтобы проверить, присутствует ли определенный элемент в этом массиве или нет в Java.

Читайте также:  Слон как есть видео

Примеры:

Ниже приведены различные способы сделать это:

Пример:

// Java-программа для проверки погоды
// элемент присутствует в массиве или нет

// Функция возвращает true, если данный элемент

private static void check( int [] arr, int toCheckValue)

// проверяем, указан ли элемент

// присутствует в массиве или нет

// используя метод линейного поиска

boolean test = false ;

for ( int element : arr) <

if (element == toCheckValue) <

System.out.println( «Is » + toCheckValue

+ » present in the array: » + test);

public static void main(String[] args)

// Получить проверяемое значение

int toCheckValue = 7 ;

// Проверить, является ли это значение

// присутствует в массиве или нет

В этом примере метод Arrays.binarySearch () используется для бинарного поиска.

Пример:

// Java-программа для проверки погоды
// элемент присутствует в массиве или нет

// Функция возвращает true, если данный элемент

private static void check( int [] arr, int toCheckValue)

// сортируем данный массив

// проверяем, указан ли элемент

// присутствует в массиве или нет

// используя метод двоичного поиска

int res = Arrays.binarySearch(arr, toCheckValue);

System.out.println( «Is » + toCheckValue

+ » present in the array: » + test);

public static void main(String[] args)

// Получить проверяемое значение

int toCheckValue = 7 ;

// Проверить, является ли это значение

// присутствует в массиве или нет

Пример:

// Java-программа для проверки погоды
// элемент присутствует в массиве или нет

// Функция возвращает true, если данный элемент

private static void check(Integer[] arr, int toCheckValue)

// проверяем, указан ли элемент

// присутствует в массиве или нет

// используя метод contains ()

System.out.println( «Is » + toCheckValue

+ » present in the array: » + test);

public static void main(String[] args)

// Получить проверяемое значение

int toCheckValue = 7 ;

// Проверить, является ли это значение

// присутствует в массиве или нет

Пример 1. Использование метода Stream.of () для создания Stream

// Java-программа для проверки погоды
// элемент присутствует в массиве или нет

// Функция возвращает true, если данный элемент

private static void check( int [] arr, int toCheckValue)

// проверяем, указан ли элемент

// присутствует в массиве или нет

// используя метод anyMatch ()

System.out.println( «Is » + toCheckValue

+ » present in the array: » + test);

public static void main(String[] args)

// Получить проверяемое значение

int toCheckValue = 7 ;

// Проверить, является ли это значение

// присутствует в массиве или нет

Пример 2. Использование метода Arrays.stream () для создания Stream

// Java-программа для проверки погоды
// элемент присутствует в массиве или нет

// Функция возвращает true, если данный элемент

private static void check( int [] arr, int toCheckValue)

Источник

Как проверить, содержит ли массив значение в JavaScript?

Какой самый краткий и эффективный способ выяснить, содержит ли массив JavaScript значение?

Это единственный способ, которым я знаю, чтобы сделать это:

Есть ли лучший и более краткий способ сделать это?

[1,2,3].indexOf(4) вернет 0, что будет оцениваться как ложь, тогда как

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

Многие фреймворки также предлагают похожие методы:

Обратите внимание, что некоторые платформы реализуют это как функцию, в то время как другие добавляют функцию в прототип массива.

Обновление с 2019 года: Этот ответ с 2008 года (11 лет!) И не имеет отношения к современному использованию JS. Обещанное улучшение производительности было основано на тесте, сделанном в браузерах того времени. Это может не относиться к современным контекстам выполнения JS. Если вам нужно простое решение, ищите другие ответы. Если вам нужна лучшая производительность, оцените себя в соответствующих средах исполнения.

Как уже говорили другие, итерация по массиву, вероятно, является наилучшим способом, но было доказано, что убывающий while цикл является самым быстрым способом итерации в JavaScript. Поэтому вы можете переписать свой код следующим образом:

Конечно, вы можете также расширить прототип Array:

И теперь вы можете просто использовать следующее:

indexOf возможно, но это «расширение JavaScript к стандарту ECMA-262; как таковое оно может отсутствовать в других реализациях стандарта».

AFAICS Microsoft не предлагает какой-то альтернативы этому, но вы можете добавить аналогичные функции для массивов в Internet Explorer (и других браузерах, которые не поддерживают indexOf ), если хотите, как показывает быстрый поиск в Google (например, этот ).

Это можно использовать так:

Он также принимает необязательный второй аргумент fromIndex :

В настоящее время это все еще черновик, но его можно заполнить, чтобы он работал во всех браузерах.

Кроме того, он хорошо вписывается в if оператор, поскольку возвращает логическое значение:

* Как отметил в комментарии jamess, на момент получения ответа, сентябрь 2018 года, Array.prototype.some() полностью поддерживается: таблица поддержки caniuse.com

Допустим, вы определили массив следующим образом:

Метод Native Array (начиная с ES2016) ( таблица совместимости )

Как пользовательский метод Array (до ES2016)

Простая функция

«. И я думаю, что это не будет работать в IE8, потому что IE8 не поддерживает indexOf () для объекта Array.

Читайте также:  Как по английски будет слово шляпа произношение

Вот совместимая с JavaScript 1.6 реализация Array.indexOf :

Если вам не нужно беспокоиться о совместимости с другим JavaScript, работающим на вашей странице, воспользуйтесь этим, в противном случае, я бы порекомендовал более неловкое, но более безопасное автономное функциональное решение.

Подумав на секунду, если вы делаете этот вызов много раз, гораздо эффективнее использовать ассоциативный массив Map для поиска с использованием хеш-функции.

Я использую следующее:

Array.prototype.some () был добавлен к стандарту ECMA-262 в 5-м издании

Надеемся, более быстрый двунаправленный indexOf / lastIndexOf альтернативный

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

Давно я думал о том, как заменить медленные функции indexOf / lastIndexOf.

Эффективный путь уже найден, глядя на топовые ответы. Из них я выбрал contains функцию @Damir Zekic, которая должна быть самой быстрой. Но в нем также говорится, что показатели взяты с 2008 года и поэтому устарели.

Мне было любопытно, если итерация была бы намного медленнее, если я проверяю обе стороны массива, делая это. По-видимому, нет, и поэтому эта функция примерно в два раза быстрее, чем те, которые проголосовали сверху. Очевидно, что это также быстрее, чем родной. Это в реальной среде, где вы никогда не узнаете, находится ли искомое значение в начале или в конце массива.

Когда вы знаете, что вы только что выдвинули массив со значением, использование lastIndexOf остается, вероятно, лучшим решением, но если вам нужно перемещаться по большим массивам, и результат может быть везде, это может быть надежным решением для ускорения работы.

Двунаправленный indexOf / lastIndexOf

Тест производительности

В качестве теста я создал массив с 100k записей.

Три запроса: в начале, в середине и в конце массива.

Я надеюсь, что вы также найдете это интересным и протестируете производительность.

Вариант прототипа массива

Функцию также можно легко изменить, чтобы она возвращала истину или ложь или даже объект, строку или что-то еще.

И вот while вариант:

Как это возможно?

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

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

Источник

Как определить, содержит ли массив определенное значение в Java?

у меня есть String[] со значениями типа так:

27 ответов

предупреждение: это не работает для массивов примитивов (см. комментарии).

С java-8

пример

просто, чтобы очистить код для начала. У нас (исправлено):

это изменчивый статический, который FindBugs скажет вам, очень непослушный. Это должно быть личное:

(обратите внимание, вы можете на самом деле бросить

можно использовать ArrayUtils.contains С Apache Commons Lang

есть методы, доступные для примитивных массивов всех видов.

пример:

Я удивлен, что никто не предложил просто реализовать его по руке:

благоустройство:

Если массив не отсортирован, вам придется перебирать все и вызывать equals для каждого.

Если массив отсортирован, вы можете выполнить двоичный поиск, есть один в массивы класса.

вообще говоря, если вы собираетесь сделать много проверок членства, вы можете сохранить все в наборе, а не в массиве.

1) Использование Списка:

2) Использование Set:

3) используя простой цикл:

4) Использование Массивов.binarySearch ():

приведенный ниже код неверен,он указан здесь для полноты. binarySearch () можно использовать только для отсортированных массивов. Вы найдете результат странно ниже. Это лучший вариант, когда массив сортированный.

Пример:

для чего это стоит, я провел тест, сравнивая 3 предложения для скорости. Я сгенерировал случайные целые числа, преобразовать их в строку и добавил их в массив. Затем я искал максимально возможное число / строку, что было бы наихудшим сценарием для asList().содержит.)(

при использовании размера массива 10K результаты где:

при использовании массива 100K результаты где:

поэтому, если массив создается в отсортированном порядке, двоичный поиск является самым быстрым, иначе asList().contains был бы путь пойти. Если у вас много поисков, то, возможно, стоит отсортировать массив, чтобы вы могли использовать двоичный поиск. Все зависит от вашего заявления.

Я думаю, что это результаты, которые большинство людей ожидали бы. Вот тестовый код:

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

тогда вы можете сделать (как указано выше): STRINGS.contains(«the string you want to find»);

С Java 8 вы можете создать поток и проверить, соответствуют ли какие-либо записи в потоке «s» :

или как общий метод:

можно использовать массивы класс для выполнения двоичного поиска значения. Если Ваш массив не отсортирован, вам придется использовать функции сортировки в том же классе для сортировки массива, а затем выполнить поиск по нему.

ObStupidAnswer (но я думаю, что где-то здесь есть урок):

на самом деле, если вы используете HashSet, как предложил том Хотин, вам не нужно беспокоиться о сортировке, и ваша скорость такая же, как и при двоичном поиске по предустановленному массиву, возможно, даже быстрее.

Читайте также:  Не знали вы что в сонмище людском я был как лошадь загнанная в мыле

все зависит от того, как настроен ваш код, очевидно, но с того места, где я стою, порядок будет:

на Несортированном массиве:

на сортированном массив:

Так или иначе, HashSet ftw

Если у вас есть библиотека Google collections, ответ Тома можно упростить, используя ImmutableSet (http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/ImmutableSet.html)

Это действительно удаляет много беспорядка из предложенной инициализации

одно из возможных решений:

разработчики часто делают:

приведенный выше код работает, но нет необходимости преобразовывать список для установки в первую очередь. Преобразование списка в набор требует дополнительного времени. Это может так:

первый является более читаемым, чем второй.

на Java 8 использовать потоки.

использование простого цикла является наиболее эффективным способом сделать это.

для массивов ограниченной длины используйте следующее (Как указано camickr). Это медленно для повторных проверок, особенно для более длинных массивов (линейный поиск).

для быстрой производительности, если вы неоднократно проверяете против большего набора элементов

массив является неправильной структурой. Используйте TreeSet и добавьте к нему каждый элемент. Он сортирует элементы и имеет быстрый exist() способ (двоичный поиск).

если элементы реализации Comparable и вы хотите, чтобы TreeSet отсортированный образом:

ElementClass.compareTo() метод должен быть совместим с ElementClass.equals() : см.триады не появляются, чтобы сражаться? (Java Set отсутствует элемент)

в противном случае, используйте свой собственный Comparator :

выплата: проверить существование некоторого элемента:

Источник

Как проверить, находится ли элемент в массиве

пример того, что мне нужно:

14 ответов

Swift 2, 3, 4:

contains() это метод расширения протокола of SequenceType (для последовательности Equatable elements), а не глобальный метод, как в предыдущие версии.

Swift старые версии:

для тех, кто пришел сюда в поисках найти и удалить объект из массива:

Swift 1

Swift 2

Swift 3, 4

использовать это расширение:

обновлено для Swift 2/3

затем вы можете сделать:

Совет: переопределение == должно быть на глобальном уровне, а не в вашем классе/структуре

я использовал фильтр.

Если вы хотите, вы можете сжать это

надеюсь, что это поможет.

обновление для Swift 2

Ура для реализаций по умолчанию!

проверьте, существует ли элемент в массиве (удовлетворяющий некоторым критериям),и если да, продолжайте работать с первым таким элементом

если намерение является:

затем альтернатива contains(_:) как blueprinted Sequence это first(where:) of Sequence :

в этом надуманном примере его использование может показаться глупым, но это очень полезно, если запрашивать массивы неосновных типов элементов для существования каких-либо элементов, выполняющих какое-либо условие. Е. Г.

проверьте, существует ли элемент в массиве (удовлетворяющий некоторым критериям),и если да, удалите первый такой элемент

комментарий ниже запросы:

как я могу удалить firstSuchElement из массива?

аналогичный случай использования к одному выше удалить первый элемент, который удовлетворяет заданному предикату. Для этого index(where:) метод Collection (который легко доступен для коллекции array) может использоваться для поиска индекса первого элемента, выполняющего предикат, после чего индекс может использоваться с remove(at:) метод Array to (возможно; учитывая, что он существует) удалите этот элемент.

обратите внимание, что в надуманном примере члены массива являются простыми типами значений ( String экземпляры), поэтому использование предиката для поиска данного члена несколько перебивает, так как мы может просто проверить равенство, используя simpler index(of:) метод, как показано в @DogCoffee это. Если применить подход «найти и удалить» выше к Person пример, однако, используя index(where:) с предикатом подходит (так как мы больше не тестируем на равенство, а для выполнения предоставленного предиката).

самый простой способ сделать это-использовать фильтр на массиве.

result будет иметь найденный элемент, если он существует, и будет пустым, если элемент не существует. Так просто проверить, если result is empty сообщит Вам, существует ли элемент в массиве. Я бы использовал следующее:

по состоянию на Swift 2.1 NSArrays имеют containsObject Это можно использовать так:

на всякий случай, если кто-то пытается найти, если indexPath является одним из выбранных (например, в UICollectionView или UITableView cellForItemAtIndexPath функции):

вот мое небольшое расширение, которое я только что написал, чтобы проверить, содержит ли мой массив делегатов объект делегата или нет ( Swift 2). 🙂 Он также работает с типами значений как шарм.

Если у вас есть идея, как оптимизировать этот код, просто дайте мне знать.

если вы не используете объект, вы можете использовать этот код для contains.

если вы используете класс NSObject в swift. Эти переменные соответствуют моему требованию. вы можете доработать для вашего требования.

Это для того же типа данных.

если вы хотите тип AnyObject.

если пользователь находит определенные элементы массива, используйте ниже код, такой же, как целочисленное значение.

Swift 4, другой способ достичь этого, с функцией фильтра

var elements = [1,2,3,4,5]

как насчет использования хэш-таблицы для работы, как это?

во-первых, создание универсальной функции «хэш-карта», расширение протокола последовательности.

Это расширение будет работать столько, сколько элементов в массиве соответствует Hashable, как целые числа или строки, вот использование.

но пока давайте просто сосредоточимся на проверке, находится ли элемент в массиве.

Источник

Adblock
detector