arrays - 具有特定格式的数组到字符串

标签 arrays ruby string format

我有这样的哈希:

@password_constraints = {
  length: 'Must be at least 6 character long.',
  contain: [
      'one number',
      'one lowercase letter',
      'one uppercase letter.'
  ]
}

我想写一个方法来返回一个人类可读的字符串,这个字符串是从这个散列构建的,就像这样:

Must be at least 6 character long. Must contain: one number, one lowercase letter and an uppercase letter.

目前,我有一个非常冗长的方法,它有一个 each 遍历 @password_constraints[:contain] 数组,并且有几个条件来检查我是否必须把一个 ,,或者一个 and 或者什么都没有。

但我想要与 join(', ') 几乎相同的行为,但最后的分隔符必须是 and

我正在寻找类似这种带有特殊join 的解决方案:

def password_constraints
  @password_constraints[:length] << ' Must contain.' << @password_constraints[:contain].join(', ') 
end

有没有办法让它更紧凑或更像 Ruby?

最佳答案

您可以使用 splat 运算符拆分数组,如果只有一个字符串,则只检查大小写:

def message(constraints)
  *others, second_last, last = constraints[:contain]
  second_last += " and #{last}" unless last.nil?
  "#{constraints[:length]} Must contain: #{(others << second_last).join(', ')}"
end

@password_constraints = {
  length: 'Must be at least 6 character long.',
  contain: [
      'one number',
      'one lowercase letter',
      'one uppercase letter.'
  ]
}

message(@password_constraints)
# => "Must be at least 6 character long. Must contain: one number, one lowercase letter and one uppercase letter." 

# if @password_constraints[:contain] = ['one lowercase letter', 'one uppercase letter.']
message(@password_constraints)
# => "Must be at least 6 character long. Must contain: one lowercase letter and one uppercase letter." 

# if @password_constraints[:contain] = ['one lowercase letter']
message(@password_constraints)
# => "Must be at least 6 character long. Must contain: one lowercase letter"

关于arrays - 具有特定格式的数组到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32615603/

相关文章:

c++ - 难以理解 for 循环如何与 C++ 中的数组交互 [作业]

ruby-on-rails - Rails 从表单更新 ActiveRecord

Java 解析输出的消息

javascript - 在 JavaScript 中查找大字符串中重复行的最佳方法

java - 从文本文件读取数据并用数组构建表

arrays - VBScript 中使用 Split() 的动态数组。有没有更好的办法?

ruby-on-rails - 我如何在 Rails 中测试助手?

string - 如何在 Go 中返回 Nil 字符串?

arrays - 基于共享内存的1d模具CUDA实现中的负数组索引

ruby - 使用 ruby gem ,而仅使用sinatra和 ruby (而不是铁轨),如何连接到盆景elasticsearch实例?