0
votes

Trouver des éléments de tableau dans une chaîne en rubis

Quel est le code efficace et simple pour rechercher des éléments de tableau dans une chaîne. Par exemple:

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

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

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


8 commentaires

Il semble un peu flou ce que vous voulez résoudre? Veuillez également ajouter ce que vous avez déjà essayé jusqu'à présent?


Voulez-vous connaître l'index de 'AAA' ?


@Mark ouais, je veux connaître l'index d'AAA ou sa valeur.


Cause en fait, je n'ai pas de variable B, il provient des entrées des utilisateurs.


Le moyen le plus simple de clarifier votre question est de montrer la valeur de retour souhaitée pour votre exemple (comme objet rubis valide). C'est quelque chose qui devrait toujours faire quand un exemple est donné. Vous voudrez peut-être inclure plus d'un élément de A dans votre chaîne B . En outre, veuillez préciser si "xbbb" , s'il s'agissait de la chaîne, serait une correspondance.


@CarySwoveland non, le mot exact devrait correspondre


Je vous suggère d'indiquer que dans la question. Les questions doivent être autonomes, en partie parce que tous les lecteurs ne lisent pas tous les commentaires.


@CarySwoveland J'ai édité la question


4 Réponses :


1
votes

Une façon je trouve est comme ci-dessous -

=> ["aaa"]


2 commentaires

Étant donné que vous avez posté votre réponse, l'OP a clarifié que "AAA" ne doit pas être égalé si la chaîne a terminé "... chaîne avec xaaa, bla bla" .


Merci beaucoup pour souligner. Je n'avais aucune idée que inclure? a ce cas de bord. Je vous suis reconnaissant.



5
votes

Je pense que c'est l'une des solutions possibles:

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 commentaires

Si la performance pour les plus grands réparations est jamais arrêtée, il pourrait être intéressant de regarder dans définir . Les ensembles ont un délai de recherche plus rapide et devraient donc en théorie avoir un résultat d'intersection plus rapide.



1
votes
def find_elements(my_string, my_array)
  my_string.split & my_array
end 
You can split the string into an array and then find the intersection of both arrays using & or even intersection if you are on ruby 2.7. This will return an array containing all of the unique matching elements. 

0 commentaires

1
votes

Vous pouvez également utiliser #select code> avec une expression régulière pour déterminer quels éléments de tableau sont dans la chaîne.

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']


0 commentaires