Ruby 交互式列表创建

Posted

技术标签:

【中文标题】Ruby 交互式列表创建【英文标题】:Ruby Interactive List Creation 【发布时间】:2021-11-28 10:26:31 【问题描述】:

刚开始使用 Ruby。

基本上,我正在尝试编写一个代码,该代码将从终端获取用户输入并创建一个数组。

Type a student name:
felix
Type another student name or press enter to finish:
Cedric
Type another student name or press enter to finish:
bob
Type another student name or press enter to finish:

Congratulations! Your Wagon has 3 students:
bob, Cedric and felix

到目前为止我所做的如下。不确定我是否需要循环?我该如何解决“其他”问题?


new_array = []
count = 0

puts "Type a student name"
name = gets.chomp
new_array << name
count = count + 1


puts "Type another student name or enter to finish"
name = gets.chomp
if name == ""
  puts "Congratulations! Your Wagon has #count student:
#new_array[0]"
else
  puts "Type another student name or enter to finish"
  name = gets.chomp
  new_array << name
  count = count + 1
  puts "Congratulations! Your Wagon has #count student:
#new_array"
end

【问题讨论】:

当我输入 a b 和 c 我得到这个 ---> 恭喜!您的 Wagon 有 2 个学生:["a", "c"] 您得到“a”、“c”,因为您没有将第二个名称添加到数组中。您的代码中有 3 个name = gets.chomp,但只有 2 个new_array &lt;&lt; name K 我修复了那个,现在我得到了这个,需要在这里实现一个循环对吗? code if name == "" puts "恭喜!您的 Wagon 有 #count 个学生:#new_array[0]" else new_array 如果没有循环,您将被限制为 3 个名称。 【参考方案1】:

为了输入任意数量的名称,您需要某种循环。这是一个没有使用loopbreakelse-part 的示例:

array = []

puts "Type a student name"
loop do
  name = gets.chomp
  break if name.empty?

  array << name
  puts "Type another student name or enter to finish"
end

但在外部有一个puts 和循环末尾的另一个puts,代码似乎有点乱。

我更愿意将每一轮的初始输出保持在循环的顶部,即使代码变得更长。这可以通过使用1.step 而不是loop 来实现,loop 将基于 1 的计数器传递到块中:(有 许多 其他方法可以做到这一点)

1.step do |i|
  if i == 1
    puts "Type a student name"
  else
    puts "Type another student name or enter to finish"
  end

  name = gets.chomp
  break if name.empty?

  array << name
end

您也不需要自己计算输入的名称,只需向数组询问其元素count


puts "Congratulations! Your Wagon has #array.count student(s):"
puts array.join(', ')

【讨论】:

谢谢!它有效,我需要修改一下,但这正是我需要的:)

以上是关于Ruby 交互式列表创建的主要内容,如果未能解决你的问题,请参考以下文章

ruby 将多个YAML文件交互式合并为一个

在 Ruby 安装期间,RVM 在交互式提示中要求用户名

Android Jetpack Compose 能够在每个项目上创建带有交互式按钮和值的列表吗?

如何基于选择列表过滤交互式网格?

ruby Ruby中的DCI(数据,上下文,交互)范例

ruby 描述Ruby中的DCI(数据,上下文,交互)架构。