Ruby:基于多个关键字搜索数组

时间:2018-02-08 17:35:46

标签: ruby class web-scraping class-method

通过一系列实例搜索多个关键字的最佳方式(不是那么重要,但这是我的特定情况)

all = [@sport = "string", @description = "string", @time = "string", 
@matchup = "string"]

这些实例中的字符串是从电视节目表中删除的信息。目前,我正在使用"包括?"我的应用程序工作正常,但我觉得它可以重构为更清洁,更高效。

这是我目前的设置:

def self.select_by(sport)
    all.select {|object| object.sport.include?(sport) || 
    object.description.include?(sport) || object.matchup.include?(sport) || 
    object.time.include?(sport) }
end

我有10个类方法可以插入select_by方法。一个例子如下。

def self.football
    select_by("Football")
end

你得到的照片:D

我将每个self.insert_sport设置为CLI中的变量,并将该变量插入另一个方法,以根据数组中的实例(运动,描述,比赛,时间)显示正确的细分。

我只是想知道有没有办法在不破坏我的功能的情况下添加更多关键字。就目前而言,它运作得相当好,因为时间表是可预测的,关键字是一致的,但由于我是编程的新手,我想确保养成覆盖我所有基础的习惯。

1 个答案:

答案 0 :(得分:1)

我会稍微重构select_by方法:

ATTRIBUTES = %i[sport description matchup time]

def self.select_by(sport)
  all.select do |object|
    ATTRIBUTES.any? { |attr| object.public_send(attr).include?(sport) }
  end
end 

添加更多属性就像将属性名称添加到常量一样简单。