Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 散列中的重复项_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 散列中的重复项

Ruby on rails 散列中的重复项,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在工作,除了一个小错误,几乎完成了 在下面的:prompts中是一个数组,为了参数起见,它是[“一”、“二”、“三”、“三”、“四] def ask_reader(prompts) @answers = {} for p in prompts puts "Give me a #{p}" @answers[p] = gets.chomp end end 这很好,我得到了一个答案散列和相应的答案,除了第二个答案[p]将覆盖第一个答案,因此

我正在工作,除了一个小错误,几乎完成了

在下面的:prompts中是一个数组,为了参数起见,它是
[“一”、“二”、“三”、“三”、“四]

  def ask_reader(prompts)
    @answers = {}
    for p in prompts
      puts "Give me a #{p}"
      @answers[p] = gets.chomp
    end
  end

这很好,我得到了一个答案散列和相应的答案,除了第二个答案[p]将覆盖第一个答案,因此我只有一个“三”的值“.有没有好的‘ruby’方法来解决这个问题?谢谢。

如何使用具有内部字段“提示”的某种包装对象作为键?

如何使用具有内部字段“提示”的某种包装对象作为键?

如何将提示映射到值列表,如下所示:

prompt1=>[“一个”] prompt2=>[“两个”] prompt3=>[“三”,“三”]
prompt4=>[“四”]

如何将提示映射到值列表,如下所示:

prompt1=>[“一个”] prompt2=>[“两个”] prompt3=>[“三”,“三”] prompt4=>[“四个”]

两个明显的选项:

通过
数组#zip
交叉引用原始提示数组和答案数组:

def ask_reader(prompts)
  prompts.inject([]) do |accu, p|
    puts "Give me a #{p}"
    accu << gets.chomp
    accu
  end
end

["one", "two", "two"].zip(["1", "2", "3"])
# => [["one", "1"], ["two", "2"], ["two", "3"]]
或者,将
散列
数组
值一起使用

def ask_reader(prompts)
  prompts.inject({}) do |accu, p|
    puts "Give me a #{p}"
    (accu[p] ||= []) << gets.chomp
    accu
  end
end
def ask_读取器(提示)
prompts.injection({})do|accu,p|
把“给我一个#{p}”
(accu[p]| |=[])两个明显的选项:

通过
数组#zip
交叉引用原始提示数组和答案数组:

def ask_reader(prompts)
  prompts.inject([]) do |accu, p|
    puts "Give me a #{p}"
    accu << gets.chomp
    accu
  end
end

["one", "two", "two"].zip(["1", "2", "3"])
# => [["one", "1"], ["two", "2"], ["two", "3"]]
或者,将
散列
数组
值一起使用

def ask_reader(prompts)
  prompts.inject({}) do |accu, p|
    puts "Give me a #{p}"
    (accu[p] ||= []) << gets.chomp
    accu
  end
end
def ask_读取器(提示)
prompts.injection({})do|accu,p|
把“给我一个#{p}”
(accu[p]| |=[])更简单的方法

a = %w[one two three four]
h = Hash.new { |hash, key| hash[key] =  a.find_index(key)+1}
p h["one"]
p h["three"]
更简单的方法

a = %w[one two three four]
h = Hash.new { |hash, key| hash[key] =  a.find_index(key)+1}
p h["one"]
p h["three"]

谢谢,我使用了第一个解决方案(因为它是最容易理解的)。谢谢,我使用了第一个解决方案(因为它是最容易理解的)。您希望算法如何为相同的对象生成唯一的哈希代码?如果需要此功能,您使用的数据结构是错误的。您希望算法如何为相同的对象生成唯一的哈希代码?如果需要此功能,则使用了错误的数据结构