簡體   English   中英

如何處理具有兩個元素的數組 - 就像哈希鍵/值對一樣?

[英]How to treat an Array with two elements as-like a Hash key / value pair?

我正在使用Ruby on Rails 3.2.2。 我有以下場景:

# hash_params.class
# => Hash
# hash_params.inspect
# => { :key1 => :value1, :key2 => value2, ... => ... }
#
def self.method_1(hash_params)
  hash_params.each do { |hash_param| self.method_2(hash_param) }
end

# param.class
# => Array
# param.inspect
# => [:key1, value1] # or '[:key2, value2]' or '[..., ...]', depending on cases.
# 
def self.method_2(param)
  logger.debug "Key   => #{param[0])"
  logger.debug "Value => #{param[1])"
end

鑒於在上面的代碼中注釋掉的輸出,當我運行method_1然后在logger文件中我有以下內容:

Key   => :key1
Value => :value1
Key   => :key2
Value => :value2
Key   => ...
Value => ...

我想將method_2param變量視為一個鍵/值對而不是數組),例如通過制作類似下面的內容

def self.method_2(param)
  param do |key, value| # Note: This code line doesn't work. It is just a sample code to clarify the question.
    logger.debug "Key   => #{key.inspect)"
    logger.debug "Value => #{value.inspect)"
  end
end

可能嗎? 如果是這樣,怎么樣? 你有什么建議?

使用Hash[]

param = [:key1, 'value1']
h = Hash[*param]
puts h[:key1]

輸出:

值1

怎么樣

def self.method_1(hash_params)
  hash_params.each do { |key, value| self.method_2(key, value) }
end

def self.method_2(key, value)
  logger.debug "Key   => #{key)"
  logger.debug "Value => #{value)"
end

否則你仍然可以在param中傳遞一個哈希值

def self.method_1(hash_params)
  hash_params.keys.each do { |key| self.method_2(hash_params.slice(key)) }
end

編輯 :如果你想要一個哈希作為參數你可以做

def self.method_1(hash_params)
  hash_params.each do { |key, value| self.method_2({key => value}) }
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM