Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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 如何在rails中迭代哈希的前半部分?_Ruby On Rails_Ruby_Hash - Fatal编程技术网

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}