首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >尝试遍历散列中的项并仅返回某些项

尝试遍历散列中的项并仅返回某些项
EN

Stack Overflow用户
提问于 2012-07-24 07:59:55
回答 3查看 5.9K关注 0票数 2

我有以下函数,它将URL解码成由URL的不同部分组成的散列。例如,在我赋值hash的第一行之后,我收到以下输出:

代码语言:javascript
代码运行次数:0
运行
复制
>> CGI.parse(URI.parse("http://google.com/?foo=bar&baz=hello").query)
=> {"foo"=>["bar"], "baz"=>["hello"]}

在这个函数中,如果键是"p“或"q”,我会尝试拉取值。从本质上讲,我希望将散列过滤成我想要的键和值。

我的目标是只显示人们搜索的关键字,比如brickcement

下面是我的函数:

代码语言:javascript
代码运行次数:0
运行
复制
  def self.get_search_terms(search_url)
    hash = CGI.parse(URI.parse(URI.encode(search_url)).query) #returns a hash
    keywords = []
    hash.each do |key|
      if key["q"] != nil || 
        key["p"] != nil
        keywords << key
      end
    end
    keywords
  end
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-24 08:26:20

一种方法是:

代码语言:javascript
代码运行次数:0
运行
复制
def self.get_search_terms(search_url)
  hash = CGI.parse(URI.parse(URI.encode(search_url)).query)
  keywords = []
  hash.each do |key, value|
    if key == 'p' || key == 'q'
      keywords << value
    end
  end
  keywords
end
票数 3
EN

Stack Overflow用户

发布于 2012-07-24 10:09:01

更惯用的ruby方式,本质上是一个一行:

代码语言:javascript
代码运行次数:0
运行
复制
def self.get_search_terms(search_url)
  CGI.parse(URI.parse(URI.encode(search_url)).query).values_at('q','p')
end

请参阅Hash#values_at

如果您要消除空参数,请在其中添加一个reject空白:

代码语言:javascript
代码运行次数:0
运行
复制
.values_at('q','p').reject(&:blank?)
票数 1
EN

Stack Overflow用户

发布于 2012-07-24 08:13:01

可能是100种方法中的一种吧!

代码语言:javascript
代码运行次数:0
运行
复制
def self.get_search_terms(search_url)
  myhash = CGI.parse(URI.parse(URI.encode(search_url)).query) 
  keywords = []
  ["p","q"].each do |mykey|
     if myhash.has_key?(mykey)
       keywords << myhash[mykey]
     end
  end
  keywords
end

或者也许

代码语言:javascript
代码运行次数:0
运行
复制
def self.get_search_terms(search_url)
  myhash = CGI.parse(URI.parse(URI.encode(search_url)).query) 
  keywords = []
  mykeywords = ["p","q"]
  mykeywords.each do |mykey|
    if myhash.has_key?(mykey)
      keywords << myhash[mykey]
    end
  end
  keywords
end

在这两个版本中,您要查找的关键字列表都是初始循环。您可以使用以下命令隐式迭代从URI提取的散列:

myhash.has_key?

这将迭代我的散列,如果它包含键,则将键的值广告到关键字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11622276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档