我想删除数组中字符串的最后11个字符。该数组是:
["cool.mp3?3829483927", "wow.mp3?3872947629", "woa.mp3?8392748308"]
我想将字符串转换为:
["cool.mp3", "wow.mp3", "woa.mp3"]
在Ruby中是否有专门针对此的方法?我知道chop和chomp,但没有任何东西可以访问数组中的每个字符串。
答案 0 :(得分:3)
有很多方法可以转换你的字符串,包括#slice,#split,#sub和#partition等等。您真正缺少的是Array#map方法,它将方法或块应用于数组的每个元素。
修改数组元素的一种方法是将Enumerable#partition方法映射到每个元素上,然后将文件名拆分为一个组件数组。通常,这将返回一个数组数组,其中每个分区字符串都是一个子数组,但您可以让#map块返回您想要的组件。在这种情况下,您想要的是每个分区数组的第一个元素。
这可能听起来很复杂,但实际上非常简单。例如:
files = %w(cool.mp3?3829483927 wow.mp3?3872947629 woa.mp3?8392748308)
files.map { |f| f.partition(??)[0] }
#=> ["cool.mp3", "wow.mp3", "woa.mp3"]
如果您认为紧凑性超出可读性,您可以获得与上述解决方案相同的结果:
for (var i=0; i < result.length; i++){
var a = Array();// loop against the Data array on each object in result
var b = Array();
a.push(result[i].data.mentionTotal);
b.push(result[i].profileName);
mentionArr.push(b+a);
}
答案 1 :(得分:1)
如果总是11个字符,你可以这样做:
arr=["cool.mp3?3829483927","wow.mp3?3872947629", "woa.mp3?8392748308"]
new=arr.map{|thing| thing[0...-11]}
答案 2 :(得分:1)
如果您想要第一个'?'之前的内容,请执行以下操作:
arr.map{|thing| thing.split('?')[0]}
答案 3 :(得分:0)
String::slice
可以将正则表达式作为参数,因此您可以提取所需的名称(而不是删除最后11个字符):
arr = ["cool.mp3?3829483927","wow.mp3?3872947629", "woa.mp3?8392748308"]
arr.map! {|x| x.slice(/\w+\.mp3/) }
#=> ["cool.mp3", "wow.mp3", "woa.mp3"]
答案 4 :(得分:0)