【问题标题】:Ruby Retrieve mails with number of pairs without too much code modificationRuby 无需太多代码修改即可检索具有对数的邮件
【发布时间】:2021-07-08 10:04:16
【问题描述】:
email = []
start = 1
while start < 51
  email.push ("jean.dupont.#{start}@email.fr")
  start += 1
end
puts email

当我做puts email 时,我想检索所有只有偶数的邮件。

我在 google 或 stackoverflow 上看了很多,发现大多数人都在调整他们的代码,但我不想过多地触及我的代码,尽管我知道这是必要的。

使用此代码检索对等电子邮件的正确方法是什么?

【问题讨论】:

    标签: arrays ruby while-loop numbers


    【解决方案1】:

    您可以在电子邮件数组上使用select 并使用[/\d+/] 提取号码并检查它是否甚至直接在puts 中,然后按该条件过滤

    puts email.select { |e| e[/\d+/].to_i.even? }
    

    [/\d+/] 相当于scan(/\d+/)[0]

    【讨论】:

      【解决方案2】:

      您可以做的最小更改是添加一个if 条件以仅在start 为偶数时推送元素(start.even?):

      email.push("jean.dupont.#{start}@email.fr") if start.even?
      

      但是,作为 Ruby,我认为您可以使用几种方法来完成类似的工作:

      (1..50)                                            # create a range of numbers from 1 to 50
        .select(&:even?)                                 # select from the range only those elements that are even
        .map { |start| "jean.dupont.#{start}@email.fr" } # map each element to create a string using their values
        .each(&method(:puts))                            # iterate over each element and invoke `puts` using the element as the argument
      

      一个很好的练习是重新考虑您的代码以提供相同的输出,但尽可能少做。例如,循环,如果您不需要奇怪的元素,那么使用它们毫无价值。您可以使迭代中的元素仅是您需要的元素。

      以及您在开头声明的email 累加器。大多数情况下,您可以通过映射您的对象(作为 Hash 或 Array 实例或任何响应 map 的实例)来实现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-19
        • 1970-01-01
        • 2010-11-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多