【问题标题】:Ruby - How to check string contains in an array?Ruby - 如何检查数组中包含的字符串?
【发布时间】:2021-01-30 21:17:33
【问题描述】:

我想提取一个不包含(不完全匹配)我给出的单词的列表。 示例:

a = ["drop", "drop down", "forum", "drop down forum"]

b = ["drop", "drop down", "forum", "drop down forum", "data"]

Input string is str = "drop"

Output should be like: a = ["forum", "data"]

这就像 MySQL 中的“LIKE”查询,但我想使用 ruby​​ 语言来做。请帮忙解决这个问题。

【问题讨论】:

  • 您的示例数据有两个数组有什么原因吗?为什么a的输出是["forum", "data"]?数组b 必须以某种方式与数组a 组合吗?
  • 你的标题没有传达你想要做什么。我认为您想要“如何从不包含某些单词的数组中提取字符串”之类的东西。标题中不需要“Ruby”,因为“ruby”是一个标签(它必须是)。您不希望 rails 作为标签,因为它是一个纯 Ruby 问题。此外,其他标签对搜索没有帮助,所以我建议“ruby”是唯一的标签。

标签: arrays ruby-on-rails ruby string extract


【解决方案1】:

Ref reject!,删除块计算为 true 的每个 self 元素。

list = ["drop", "drop down", "forum", "drop down forum"]
str = 'drop'
list.reject!{|item| item.include? str} # list = ["forum"]

注意:- 包括?对 ex 区分大小写:- 'Drop down'.include? 'drop' 将返回 false。

如果不区分大小写,我们可以执行以下操作

list.reject!{|item| item.downcase.include? str.downcase}

对于多个列表,您可以执行以下操作

list_one = ["drop", "drop down", "forum", "drop down forum"]
list_two = ["drop", "drop down", "forum", "drop down forum", "data"]
(list_one + list_two).uniq.reject{|item| item.downcase.include? str.downcase} # ["forum", "data"]

【讨论】:

  • 使用有意义的变量名会有所帮助,而不是aaalistitem 怎么样?
  • 我们不能通过比较给定字符串(输入)的 2 个数组来提取它吗?更新了问题。
  • list = ["drop", "droplet", "gumdrops"] 怎么样?这就是@Sampat 使用带有单词边界的正则表达式的原因。
【解决方案2】:
list1 = ["drop", "drop down", "forum", "drop down forum"]

list2 = ["drop", "drop down", "forum", "drop down forum", "data"]

result = (list1 | list2).reject{ |i| i.match(/\bdrop\b/i) }
=> ["forum", "data"]

【讨论】:

    猜你喜欢
    • 2012-04-30
    • 2012-01-05
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 2021-06-10
    相关资源
    最近更新 更多