首页 > 解决方案 > 在循环中转换我的程序,但它在数组中

问题描述

我有一个包含 1 个 381 个元素的数组的程序。我必须根据字符大小突出显示元素,但我确实喜欢这样:

print "Nombre de handle avec 2 caractères : "
    puts jnr.count { |w| w.length == 2 }
    print "Nombre de handle avec 3 caractères : "
    puts jnr.count { |w| w.length == 3 }
    print "Nombre de handle avec 4 caractères : "
    puts jnr.count { |w| w.length == 4 }
    print "Nombre de handle avec 5 caractères : "
    puts jnr.count { |w| w.length == 5 }
    print "Nombre de handle avec 6 caractères : "
    puts jnr.count { |w| w.length == 6 }
    print "Nombre de handle avec 7 caractères : "
    puts jnr.count { |w| w.length == 7 }
    print "Nombre de handle avec 8 caractères : "
    puts jnr.count { |w| w.length == 8 }
    print "Nombre de handle avec 9 caractères : "
    puts jnr.count { |w| w.length == 9 }
    print "Nombre de handle avec 10 caractères : "
    puts jnr.count { |w| w.length == 10 }
    print "Nombre de handle avec 11 caractères : "
    puts jnr.count { |w| w.length == 11 }
    print "Nombre de handle avec 12 caractères : "
    puts jnr.count { |w| w.length == 12 }
    print "Nombre de handle avec 13 caractères : "
    puts jnr.count { |w| w.length == 13 }
    print "Nombre de handle avec 14 caractères : "
    puts jnr.count { |w| w.length == 14 }
    print "Nombre de handle avec 15 caractères : "
    puts jnr.count { |w| w.length == 15 }
    print "Nombre de handle avec 16 caractères : "
    puts jnr.count { |w| w.length == 16 }

但我想知道是否可以将其简化为一个循环,但知道它在一个数组中,这些值非常特殊,当我尝试“while”时它不起作用。

先感谢您 !

标签: arraysrubyloopswhile-loop

解决方案


你可以group_by(&:length)在你拥有的单词数组上创建一个由相同键分组的具有相同长度的单词散列,然后遍历散列并相应地打印

hash  = jnr.group_by(&:length)
hash.each do |length, arr_of_words|
  puts "Nombre de handle avec #{length} caractères : #{arr_of_words.count}"
end

例子:

[4] pry(main)> hash = ["Volvo", "BMW", "Ford", "Mazda", "XXX", "YYY"].group_by(&:length)
=> {5=>["Volvo", "Mazda"], 3=>["BMW", "XXX", "YYY"], 4=>["Ford"]}
[5] pry(main)> hash.each do |length, arr_of_words|
[5] pry(main)*   puts "Nombre de handle avec #{length} caractères : #{arr_of_words.count}"
[5] pry(main)* end
Nombre de handle avec 5 caractères : 2
Nombre de handle avec 3 caractères : 3
Nombre de handle avec 4 caractères : 1

推荐阅读