gpt4 book ai didi

ruby - 使用用户输入/最少代码行填充数组的最简单方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:06:15 25 4
gpt4 key购买 nike

根据用户输入创建由混合数据类型(即包含字符串、整数和 float 的数组)组成的包含 x 个元素的数组的最简单方法是什么

到目前为止,我编写了一些使用 for 循环工作的代码,但我想知道是否有一种方法可以优化它并使代码行数最少。

puts "how many elements?"

max = gets.to_i
array = []

for i in 0..max - 1
puts "are you entering in a string, an int or a float?"
data_type = gets.chomp

if %W[string STRING String s S].include?(data_type)
puts "enter in a string"
array[i] = gets.chomp
elsif %W[int INT Int i I].include?(data_type)
puts "enter an int"
array[i] = gets.to_i
elsif %W[Float FLOAT float f F].include?(data_type)
puts "enter a float"
array[i] = gets.to_f
end
end

print array

最佳答案

最少行数?一。一旦你有 max:

array = max.times.map { gets.chomp.then { |l| case l when /^\d+$/ then l.to_i when /^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$/ then l.to_f else l end } }

这个更短(虽然有些人会反对):

array = max.times.map { gets.chomp.then { |l| Integer(l) rescue Float(l) rescue l } }

不过,将它写成几行会更具可读性。

另请注意,Ruby 主义者基本上假装 for 在该语言中不存在,并且通常会用 Enumerable#eachInteger#times 和类似的。


这与您拥有的不太一样;我的代码使得不可能有一个有效数字的字符串,例如“2.0”。如果您想要该功能,那么您的代码还算不错(并且对行数的痴迷通常会被误导)。我会改变的事情:

  • 循环。 array = max.times.map do ... end over for 任何时间。 (这也使得对 array[i] 的显式赋值变得不必要。)

  • "float".start_with?(data_type.downcase) 而不是 %W[Float FLOAT float f F].include?(data_type),所以您无需担心列出所有变体。

关于ruby - 使用用户输入/最少代码行填充数组的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58483615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com