Tag: 数组

在Ruby中使用Hash反转?

我有一个格式的哈希: {key1 => [a, b, c], key2 => [d, e, f]} 我想最终得到: { a => key1, b => key1, c => key1, d => key2 … } 实现这一目标的最简单方法是什么? 我正在使用Ruby on Rails。 UPDATE 好吧,我设法从服务器日志中提取真实对象,它是通过AJAX推送的。 Parameters: {“status”=>{“1″=>[“1”, “14”], “2”=>[“7”, “12”, “8”, “13”]}}

Ruby中数组的深层副本

我想在生产中获得一个对象并做一个精确的副本(复制其内容)到另一个相同类型的对象。 我尝试从ruby控制台以3种方式执行此操作,但它们都没有工作: 假设您将tt作为要复制的第一个对象,将tt2作为副本对象。 我尝试的第一种方法是克隆数组 tt2.patients = tt.urls.patients tt2.doctors = tt.segments.doctors tt2.hospitals = tt.pixels.hospitals 我尝试的第二种方法是复制数组,这实际上与克隆数组相同: tt2.patients = tt.patients.dup tt2.doctors = tt.doctors.dup tt2.hospitals = tt.hospitals.dup 我尝试的第三种方法是marhsalling。 tt2.patients = Marshal.load(Marshal.dump(tt.patients)) tt2.doctors = Marshal.load(Marshal.dump(tt.doctors)) tt2.hospitals = Marshal.load(Marshal.dump(tt.hospitals)) 以上都不适用于从一个arrays到另一个arrays的深度复制。 在上面单独尝试每种方法之后,第一个对象( tt )的所有内容都无效(患者,医生和医院都消失了)。 您是否有任何其他想法将一个对象的内容复制到另一个对象? 谢谢。

从Ruby中的哈希数组中删除哈希

我有一系列哈希如下: [{“k1″=>”v1”, “k2″=>”75.1%”}, {“k1″=>”v2”, “k2″=>”-NA-“}, {“k1″=>”v3”, “k2″=>”5.1%”}] 现在,我想首先检查数组是否包含带有值为”v3″键”k1″的散列。 如果是,那么我想从数组中删除该哈希。 结果应该是: [{“k1″=>”v1”, “k2″=>”75.1%”}, {“k1″=>”v2”, “k2″=>”-NA-“}]

复制Ruby字符串数组

arr = [“red”,”green”,”yellow”] arr2 = arr.clone arr2[0].replace(“blue”) puts arr.inspect puts arr2.inspect 生产: [“blue”, “green”, “yellow”] [“blue”, “green”, “yellow”] 无论如何都要做一个字符串数组的深层副本,除了使用Marshal,因为我知道这是一个黑客。 我可以: arr2 = [] arr.each do |e| arr2 << e.clone end 但它似乎并不优雅或高效。 谢谢

将哈希数组转换为散列哈希值,由哈希值的属性索引

我有一个表示对象的哈希数组作为对API调用的响应。 我需要从一些哈希中提取数据,并且一个特定的键用作哈希对象的id。 我想将数组转换为哈希,键为ids,值为原始哈希值。 这就是我在说的: api_response = [ { :id => 1, :foo => ‘bar’ }, { :id => 2, :foo => ‘another bar’ }, # .. ] ideal_response = { 1 => { :id => 1, :foo => ‘bar’ }, 2 => { :id => 2, :foo => ‘another bar’ }, # .. } 我有两种方法可以想到这样做。 […]

Enumerable的group_by是否保留了Enumerable的顺序?

Enumerable#group_by是否保留每个值中的原始顺序? 当我得到这个: [1, 2, 3, 4, 5].group_by{|i| i % 2} # => {1=>[1, 3, 5], 0=>[2, 4]} 是否保证,例如,数组[1, 3, 5]按此顺序包含元素而不是,例如[3, 1, 5] ? 有关于这一点的描述吗? 我没有提到键1和0之间的顺序。 这是一个不同的问题。

Ruby – 从散列数组中提取每个键的唯一值

从下面的哈希值中,需要提取每个键的唯一值 array_of_hashes = [ {‘a’ => 1, ‘b’ => 2 , ‘c’ => 3} , {‘a’ => 4, ‘b’ => 5 , ‘c’ => 3}, {‘a’ => 6, ‘b’ => 5 , ‘c’ => 3} ] 需要提取数组中每个键的唯一值 ‘a’的唯一值应该给出 [1,4,6] ‘b’的唯一值应该给出 [2,5] ‘c’的唯一值应该给出 [3] 想法?

如何检查数组中是否设置了nil?

如果我将一些nil值设置为数组,我似乎无法检查它们。 我试过了any? empty? 。 array = [nil, nil, nil] #=> [nil, nil, nil] array[1].any? #=> “NoMethodError: undefined method `any?’ for nil:NilClass”

Ruby 2.0.0 Array #bsearch行为

我注意到,从Ruby 2.0.0开始,数组类有一个我正在测试的bsearch方法,而且我没有得到我期望的行为。 为什么它返回2和5的值,但是-1,1和4的值是1? arr_in = [-1, 1, 2, 4, 5] arr_in.bsearch { |x| x == 3 } #=> nil arr_in.bsearch { |x| x == -1 } #=> nil arr_in.bsearch { |x| x == 1 } #=> nil arr_in.bsearch { |x| x == 2 } #=> 2 arr_in.bsearch { |x| x == 4 } #=> nil […]

将Array转换为Hash,同时在Ruby中保留Array索引值

我有一个数组中有X个值的数组。 以下数组只有4个,但我需要代码是动态的,而不是只依赖于有四个数组对象。 array = [“Adult”, “Family”, “Single”, “Child”] 我想将array转换为如下所示的哈希: hash = {0 => ‘Adult’, 1 => ‘Family’, 2 => ‘Single’, 3 => ‘Child’} 散列应该具有与数组具有对象一样多的键/值对,并且值应该从0开始并且对于每个对象递增1。