尝试拆分字符串并应用备用后缀

时间:2014-06-23 11:35:07

标签: ruby arrays string

我有一个字符串:

str='SA201406005/007/009/010'

如何获得此结果?

['SA201406005','SA201406007','SA201406009', 'SA201406010']

此代码有效:

arr=[]
arr=str.split(/\//)
arr=arr[1..-1].map{|x|x=arr[0].slice(0,arr[0].size-arr[-1].size)+x}.unshift(arr[0])

有更简单的方法吗?

3 个答案:

答案 0 :(得分:6)

a = str.split("/")
a.map{|s| s.rjust(a.first.length, a.first)}
# => ["SA201406005", "SA201406007", "SA201406009", "SA201406010"]

答案 1 :(得分:2)

此代码不对基数或其任何后缀的长度做出假设:

def apply_suffixes(s)
  base, *suffixes = s.split("/")
  [base] + suffixes.map do |suffix|  
    base[0...-suffix.length] + suffix
  end
end

p apply_suffixes("SA201406005/007/009/010")
# => ["SA201406005", "SA201406007", "SA201406009", "SA201406010"]

一个有趣的部分是:

  base, *suffixes = s.split("/")

使用destructuring bind

同样有趣:

  0...-suffix.length

" ..." operater产生的范围不包括其最大值。 0...-suffix.length相当于0..(-suffix.length-1)

答案 2 :(得分:1)

这个怎么样:

str = 'SA201406005/007/009/010'
prefix, suffixes = str[0..7], str[8..-1]
suffixes.split('/').map { |s| prefix + s }
# => ["SA201406005", "SA201406007", "SA201406009", "SA201406010"]

它假定前缀总是8个字符。