Найти элементы массива в строке на языке ruby - PullRequest
0 голосов
/ 28 марта 2020

Какой эффективный и простой код для поиска элементов массива в строке. Например:

a = Array['aaa', 'bbb', 'ccc', 'ddd', 'eee']

b = "This is the sample string with aaa , blah blah"

c = someFunction(b, a)
puts c
=> ['aaa']

Предположим, что массив состоит из 100 элементов, я хочу знать, какой из элементов массива находится в строке. Я должен соответствовать точное слово. Итак, xbbb, bbaa, ... не совпадают.

Ответы [ 4 ]

5 голосов
/ 29 марта 2020

Я думаю, что это одно из возможных решений:

def some_method(string, array)
  string.split & array
end

a = Array['aaa', 'bbb', 'ccc', 'ddd', 'eee']
b = "This is the sample string with aaa , blah blah"
> some_method(b, a)
=> ['aaa']

a = Array['aaa', 'bbb', 'ccc', 'ddd', 'eee']
b = "This is the sample string with xaaa , blah blah"
> some_method(b, a)
=> []
1 голос
/ 29 марта 2020

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

def check_string(ary, str)
  ary.select do |e| 
    str =~ /\b#{e}\b/ 
  end
end

p check_string(%w(aaa bbb ccc), 'Here is a saaample bbb string ccc') # => ['bbb', 'ccc']

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

1 голос
/ 29 марта 2020
def find_elements(my_string, my_array)
  my_string.split & my_array
end 

Вы можете разбить строку на массив и затем найти пересечение обоих массивов, используя & или даже intersection, если вы используете ruby 2,7. Это вернет массив, содержащий все уникальные совпадающие элементы.

1 голос
/ 28 марта 2020

Один способ, который я нашел, похож на ниже -

array =  Array['aaa', 'bbb', 'ccc', 'ddd', 'eee']
string = "This is the sample string with aaa , blah blah"
found = []

array.each { |a| found << a if string.include? a }

puts found
=> ["aaa"] 

РЕДАКТИРОВАТЬ

После изучения другого варианта использования, где необходимо точное совпадение и как include? совпадения «aaa», даже если он находится в «xxaaa», одним из возможных решений является использование «Set Intersection with Arrays» в Ruby -

def some_methodd(array, string)
  string.split & array
end

, тогда он вернет точное совпадение.

=> ["aaa"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...