我试图采用类似
的数组[ "First.Package", "Second.Package" ]
并将其转换为
[ "First.Package.ads", "First.Package.adb", "Second.Package.ads", "Second.Package.adb" ]
我尝试过以下操作:
packages = [ "First.Package", "Second.Package" ]
files = []
packages.each do |package|
files << (package << ".ads")
files << (package << ".adb")
end
return files
我不认为应该这样做。我明白了:
First.Package.ads.adb
First.Package.ads.adb
Second.Package.ads.adb
Second.Package.ads.adb
我想:
First.Package.ads
First.Package.adb
Second.Package.ads
Second.Package.adb
答案 0 :(得分:5)
packages = ["First.Package", "Second.Package"]
suffixes = [".ads", ".adb"]
packages.product(suffixes).map(&:join)
#=> ["First.Package.ads", "First.Package.adb",
# "Second.Package.ads", "Second.Package.adb"]
请注意
packages.product(suffixes)
#=> [["First.Package", ".ads"], ["First.Package", ".adb"],
# ["Second.Package", ".ads"], ["Second.Package", ".adb"]]
请参阅Array#product。
答案 1 :(得分:4)
package << ".ads
改变了包的状态。在这样的地方使用+
进行字符串连接,因为它不会改变状态。它只返回新的字符串(这是你真正想要的)。
packages.each do |package|
files << (package + ".ads")
files << (package + ".adb")
end
这应该适合您的情况
答案 2 :(得分:3)
给出
packages = %w(First.Package Second.Package)
extensions = %w(.ads .adb)
你可以这样做:
files = packages.map do |package|
extensions.map do |extension|
package + extension
end
end.flatten