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

标签 ruby arrays mapping

我有一个看起来像这样的文件:

TTITLE0=track name 1
TTITLE1=track name 2

以及包含track01.cdda.wav.mp3track02.cdda.wav.mp3

的目录

我有以下代码,它创建了 2 个不同的数组,1 个包含轨道名称,1 个包含轨道标题:

tracks = Dir.glob("*.mp3")

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

这给了我 2 个数组:

["track name 1", "track name 2"]

["track01.cdda.wav.mp3", "track02.cdda.wav.mp3"]

我想用第一个数组的元素重命名第二个数组中的文件。所以,"track01.cdda.wav.mp3" 会变成 "track name 1.mp3"

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

tracks.map {|track| File.rename("#{tracks}", "#{tracknames}.mp3") }

我得到了错误:

No such file or directory - track01.cdda.wav.mp3track02.cdda.wav.mp3 or track name 1track name 2 (Errno::ENOENT)

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

有什么想法吗?

最佳答案

使用Array#zip :

tracks.zip(tracknames).each do |track, trackname|
  File.rename track, "#{trackname}.mp3"
end

或者(不太有趣,但不会在枚举之前创建中间数组):

tracks.each_with_index do |track, i|
  File.rename track, "#{tracknames[i]}.mp3"
end

关于ruby 用不同数组的元素重命名数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6543689/

相关文章:

ruby-on-rails - 我应该在我的 Gemfile 中指定确切的版本吗?

java - 无法在数组中确定和定位并在数组中向前跳过

java - 原始数组与集合

c# - 墨卡托投影和缩放

c# - 如何使用 AutoMapper 为特定映射映射空值?

字典/映射/哈希的 Python 命名约定

ruby-on-rails - 如何使用 searchkick 进行逻辑运算的复杂查询

ruby-on-rails - 如何在 Rails 的 ActiveRecord 中获取对象的所有值?

ruby-on-rails - Ruby 中的文本格式(用于装箱单)

c - 在 C 中传递多维数组