Как проверить, есть ли элемент в Groovy array / hash / collection / list?

Как определить, содержит ли массив элемент? Я подумал, что может быть что-то вроде [1, 2, 3].includes(1), которое оценивается как true.

Можете ли вы найти индекс также и в том месте, где находится этот равный элемент в списке?

Atharva Johri 30.03.2012 15:53

@AtharvaJohri assert [12,42,33].indexOf(42) == 1

Thomas Traude 30.03.2012 23:09
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
132
2
234 355
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Для списков используйте contains:

[1,2,3].contains(1) == true

Вероятно, вы хотели сказать [1,2,3] .contains (1). Поскольку я предполагаю, что функция contains сама уже возвращает логическое значение. Почему вы хотите снова сравнить это с жестко запрограммированной «истиной».

Harshay Buradkar 30.11.2012 07:01

@HarshayBuradkar Чтобы убедиться, что true == true, конечно, # шутка

Automatico 20.01.2015 13:29

Немного синтаксического сахара

1 in [1,2,3]

Осторожный. def m = [a: true]; 'a' in m → правда, но def m = [a: false]; 'a' in m → ложь!

Jesse Glick 01.02.2017 22:15

Как вы это отрицаете?

Big McLargeHuge 08.08.2020 01:01
Ответ принят как подходящий

.contains () - лучший метод для списков, но для карт вам нужно будет использовать .containsKey () или .containsValue ()

[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')

И, кроме того, чтобы проверить, содержит ли карта какое-либо ненулевое значение под определенным ключом, достаточно проверить следующее выражение if (aMap["aKey"]==aValue).

Naeel Maqsudov 18.12.2017 15:58

Если вам действительно нужен метод include в ArrayList, просто добавьте его:

ArrayList.metaClass.includes = { i -> i in delegate }

ВАЖНО! Попробуй использовать .contains () для коллекции объектов, таких как домены. Если объявление домена содержит EqualsAndHashCode или какую-либо другую реализацию equals (), чтобы определить, равны ли эти Ojbects, и вы установили его следующим образом ...

import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")

тогда .contains (myObjectToCompareTo) будет оценивать данные в myObjectToCompareTo с данными для каждого экземпляра объекта в коллекции. Итак, если ваш метод equals не подходит, как мой, вы можете увидеть неожиданные результаты.

def fruitBag = ["orange","banana","coconut"]
def fruit = fruitBag.collect{item -> item.contains('n')}

Сделал вот так, работает, если кто то ищет.

Вы можете использовать оператор членства:

def list = ['Grace','Rob','Emmy']
assert ('Emmy' in list)  

Оператор членства Groovy

Вы также можете использовать совпадения с регулярным выражением, например:

boolean bool = List.matches("(?i).*SOME STRING HERE.*")

Другие вопросы по теме