Ruby on rails 如何在rails中迭代哈希的前半部分?
我有一个散列,例如:Ruby on rails 如何在rails中迭代哈希的前半部分?,ruby-on-rails,ruby,hash,Ruby On Rails,Ruby,Hash,我有一个散列,例如: { "ruby": 5, "python": 4, "java": 3, "js": 2, "php", 1 } 我知道如何迭代哈希: <% languages.each for |key, value| %> <% end %> 我想迭代这个散列的前半部分,我可以用语言得到散列的大小。length,但是语言[I]似乎什么也不返回。您可以使用每个\u和\u索引,它将循环通过集合和提供程序当前元素索引
{
"ruby": 5,
"python": 4,
"java": 3,
"js": 2,
"php", 1
}
我知道如何迭代哈希:
<% languages.each for |key, value| %>
<% end %>
我想迭代这个散列的前半部分,我可以用
语言得到散列的大小。length
,但是语言[I]
似乎什么也不返回。您可以使用每个\u和\u索引,它将循环通过集合和提供程序当前元素索引
<% languages.each_with_index for |value, index| %>
<% end %>
您可以将每个_与_索引一起使用,它将循环遍历集合和提供程序当前元素索引
<% languages.each_with_index for |value, index| %>
<% end %>
您可以获得一组密钥:
keys = myhash.keys[0, myhash.length / 2]
然后,您可以为这些键选择哈希项:
firsthalf = myhash.select {|key,value| keys.include?(key) }
这将为您提供一个可以迭代的前半部分哈希的副本,推送到视图在那里迭代,等等。但是,如果这是一个非常大的哈希,您不想复制,最好如上所述进行迭代,并在完成后停止。您可以获得一组密钥:
keys = myhash.keys[0, myhash.length / 2]
然后,您可以为这些键选择哈希项:
firsthalf = myhash.select {|key,value| keys.include?(key) }
这将为您提供一个可以迭代的前半部分散列的副本,推送到视图在那里进行迭代,等等。但是,如果这是一个非常大的散列,您不想复制,最好如上所述进行迭代,并在完成后停止
事实上,我想先得到{“ruby”:5,“python”:4,“java”:3}
,然后我想得到{“js”:2,“php”:1}
Rails提供了一种方法,但您必须将语言
转换为数组:
languages = { ruby: 5, python: 4, java: 3, js: 2, php: 1 }.to_a
languages.in_groups_of(3, false).each do |group|
group.each do |key, value|
puts "#{key} = #{value}"
end
puts '---'
end
输出:
ruby = 5
python = 4
java = 3
---
js = 2
php = 1
---
事实上,我想先得到{“ruby”:5,“python”:4,“java”:3}
,然后我想得到{“js”:2,“php”:1}
Rails提供了一种方法,但您必须将语言
转换为数组:
languages = { ruby: 5, python: 4, java: 3, js: 2, php: 1 }.to_a
languages.in_groups_of(3, false).each do |group|
group.each do |key, value|
puts "#{key} = #{value}"
end
puts '---'
end
输出:
ruby = 5
python = 4
java = 3
---
js = 2
php = 1
---
这里有一个快速的方法:
languages.first(languages.length / 2).each do |k, v|
# Do what ever you want here
end
这是因为散列元素是按其键插入的顺序排列的
并回应你的评论
@Stefan,事实上,我想得到{“ruby”:5,“python”:4,“java”:3} 首先,然后我想得到{“js”:2,“php”:1} 你可以用 这里有一个快速的方法:
languages.first(languages.length / 2).each do |k, v|
# Do what ever you want here
end
这是因为散列元素是按其键插入的顺序排列的
并回应你的评论
@Stefan,事实上,我想得到{“ruby”:5,“python”:4,“java”:3} 首先,然后我想得到{“js”:2,“php”:1} 你可以用
“上半场”是什么意思?你能显示预期的输出吗?@Stefan,事实上,我想先得到{“ruby”:5,“python”:4,“java”:3},然后我想得到{“js”:2,“php”:1}你说的“前半部分”是什么意思?你能显示预期的输出吗?@Stefan,事实上,我想先得到{“ruby”:5,“python”:4,“java”:3},然后我想得到{“js”:2,“php”:1}