首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ruby使用不同数组的元素重命名数组的元素

ruby使用不同数组的元素重命名数组的元素
EN

Stack Overflow用户
提问于 2011-07-01 12:48:16
回答 2查看 348关注 0票数 1

我有一个如下所示的文件:

代码语言:javascript
复制
TTITLE0=track name 1
TTITLE1=track name 2

和一个包含track01.cdda.wav.mp3track02.cdda.wav.mp3的目录

我有下面的代码,它创建了两个不同的数组,一个包含曲目名称,另一个包含曲目标题:

代码语言:javascript
复制
tracks = Dir.glob("*.mp3")

tracknames = Array.new
File.open('read').each do |line|
  if line =~ /TTITLE/
    tracknames << line.split("=")[1].strip!
  end
end

这给了我两个数组:

代码语言:javascript
复制
["track name 1", "track name 2"]

代码语言:javascript
复制
["track01.cdda.wav.mp3", "track02.cdda.wav.mp3"]

我想用第一个数组的元素重命名第二个数组中的文件。因此,"track01.cdda.wav.mp3"将成为"track name 1.mp3"

这是我到目前为止尝试过的:

代码语言:javascript
复制
tracks.map {|track| File.rename("#{tracks}", "#{tracknames}.mp3") }

然后我得到了错误:

代码语言:javascript
复制
No such file or directory - track01.cdda.wav.mp3track02.cdda.wav.mp3 or track name 1track name 2 (Errno::ENOENT)

我必须记住,在未来,每个数组中可能有任意数量的元素,但这些元素的数量将彼此相等。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-01 12:52:28

使用Array#zip

代码语言:javascript
复制
tracks.zip(tracknames).each do |track, trackname|
  File.rename track, "#{trackname}.mp3"
end

或者(没那么有趣,但不会在枚举之前创建一个中间数组):

代码语言:javascript
复制
tracks.each_with_index do |track, i|
  File.rename track, "#{tracknames[i]}.mp3"
end
票数 4
EN

Stack Overflow用户

发布于 2011-07-01 12:57:51

你真的需要两个数组吗?你只需要一个就行了:

代码语言:javascript
复制
tracks = Dir.glob("*.mp3")
File.open('read').each do |line|
  if line =~ /TTITLE/
    to = line.split("=")[1].strip!
    File.rename tracks.shift, "#{to}.mp3"
  end
end

然后,您的shift调用将把tracks留空,但这可能不是问题。

至于您的:

代码语言:javascript
复制
tracks.map {|track| File.rename("#{tracks}", "#{tracknames}.mp3") }

按照这种方法,问题是当您将tracks数组内插为"#{tracks}"时,您将在该数组上调用to_s,而这只是将tracks中的所有单独字符串混在一起,作为一大堆“不是您想要的”。tracknames也是如此。而map不是您想要的,因为您没有对File.rename返回值做任何操作。但是,您可以这样做:

代码语言:javascript
复制
tracks.each {|track| File.rename("#{track}", "#{tracknames.shift}.mp3") }

或者使用each_with_index

代码语言:javascript
复制
tracks.each_with_index {|track,i| File.rename("#{track}", "#{tracknames[i]}.mp3") }

那一个会让tracknames完好无损。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6543689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档