繁体   English   中英

Ruby - 在数组元素中打印字符串的第一部分

[英]Ruby - print first part of string in element of array

给定一个字符串数组(全名),我只需要打印名字(提示 - 我需要使用迭代和数组方法)

搜索词:“ruby print part of element in array”、“ruby array split strings”、“ruby each array.first”、“ruby print element array parameters”。

我从堆栈溢出测试了很多不同的可能解决方案,我尝试了 ruby 文档和其他一些数组教程,但找不到我想要做的事情。 我觉得我想太多了,但我无法超越这一点。

类似的工作代码:

full_names = ["Alice Smith", "Bob Evans", "Roy Rogers"]
puts "exercise #4 - print names by line"
full_names.each do |name|
  puts name
end

损坏的代码 - 上次尝试的代码:

puts "exercise #4 - print only first"
full_names = ["Alice Smith", "Bob Evans", "Roy Rogers"]
full_names.each do |name|
  puts name.first
end

错误 ex_a.rb:78:in block in <main>': undefined method first' for "Alice Smith":String (NoMethodError)(第 78 行是 'puts name.first')

很近:

puts "exercise #4 - print only first"
full_names = ["Alice Smith", "Bob Evans", "Roy Rogers"]
full_names.each do |name|
  puts name.split.first
end

这与 steenslag 的回答基本相同,但您也可以像这样在一行中完成:

puts "exercise #4 - print only first"
full_names = ["Alice Smith", "Bob Evans", "Roy Rogers"]
full_names.each { |name| puts name.split.first }

或者

full_names.each { |name| puts name.split[0] }

您收到错误undefined method: firstfirst是可枚举和数组 class 的方法。 https://rubyapi.org/2.7/o/array#method-i-first

split字符串(在这种情况下,名称由空格分隔)后,您将每个字符串单独转换为一个数组。 所以"Alice Smith".split => ["Alice", "Smith"] 然后,您可以使用first[0]访问此数组的第一项,这将访问任何数组的第一个索引。

同样,当您将 [0] 应用于字符串时,例如"Alice"[0] ,这是访问"Alice"的第一项的String#slice方法。

因此, "Alice"[0] => "A"参见: https://rubyapi.org/2.7/o/s?q=slice

虽然差别不大,但我会避免split并更喜欢以下方法:

puts name[/\S+/] # first word anywhere in the string

或者

puts name[/^\S+/] # word must be at the start of the string

如果您有一天执行相同的想法从长文本中提取第一个单词,则差异可能很重要。 使用split ,将扫描整个字符串并创建一个包含所有单词的临时数组,但您只需要第一个。 使用我的方法,只会扫描字符串,直到识别出第一个单词。

我的两个变体之间的区别在于,即使有前导空格,第二个也会提取名字,例如" Alice Smith" 此外,这种方法可以很容易地扩展到将标点符号作为单词分隔符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM