首页 > 解决方案 > 通过使用默认值初始化哈希键,是否有任何不同的方法来编写下面的代码?

问题描述

编写一个方法,返回字符串中使用的各种小写、大写、数字和特殊字符的编号。利用范围。

输入=“heLLo Every1”

我正在提供的解决方案中使用范围和案例方法。

解决方案:

class String
  def character_count
    uppercase_count = 0
    lowercase_count = 0
    digit_count = 0
    uppercase_range = Range.new('A', 'Z')
    lowercase_range = Range.new('a', 'z')
    digit_range = Range.new('0', '9')
    special_character_count = 0
    each_char do |item|
      case item
      when uppercase_range
        uppercase_count += 1
      when lowercase_range
        lowercase_count += 1
      when digit_range
        digit_count += 1
      else
        special_character_count += 1
      end
    end
    [lowercase_count, uppercase_count, digit_count, special_character_count]
  end
end

if ARGV.empty?
  puts 'Please provide an input'
else
  string = ARGV[0]
  count_array = string.character_count
  puts "Lowercase characters = #{count_array[0]}"
  puts "Uppercase characters = #{count_array[1]}"
  puts "Numeric characters = #{count_array[2]}"
  puts "Special characters = #{count_array[3]}"
end

代码正在运行。

标签: ruby

解决方案


是的

class String
  def character_count
    counters = Hash.new(0)
    each_char do |item|
      case item
      when 'A'..'Z'
        counters[:uppercase] += 1
      when 'a'..'z'
        counters[:lowercase] += 1
      when '0'..'9'
        counters[:digit] += 1
      else
        counters[:special] += 1
      end
    end
    counters.values_at(:uppercase, :lowercase, :digit, :special)
  end
end

if ARGV.empty?
  puts 'Please provide an input'
else
  string = ARGV[0]
  uppercase, lowercase, digit, special = string.character_count
  puts "Lowercase characters = #{lowercase}"
  puts "Uppercase characters = #{uppercase}"
  puts "Numeric characters = #{digit}"
  puts "Special characters = #{special}"
end

推荐阅读