例如,我有一个结构如下的数组:
my_array = [["..\\..\\..\\Source\\file1.c"], ["..\\..\\..\\Source\\file2.c"]]
此数组由以下代码生成:
File.open(file_name) do |f|
f.each_line {|line|
if line =~ /<ClCompile Include="..\\/
my_array << line.scan(/".*.c"/)
end
}
end
稍后在代码中我正在处理数组:
my_array .each {|n| f.puts n.gsub(/\\/,"//")}
如您所见,想要在数组中的元素上使用正斜杠替换所有反斜杠。元素显示源文件的路径。最后,我将在另一个文件中输出这些路径。
我收到此错误:
undefined method `gsub' for [["..\\..\\..\\Source\\file1.c"], ["..\\..\\..\\Source\\file2.c"]]:Array (NoMethodError)
有什么想法吗?
答案 0 :(得分:1)
你有一个数组数组,所以如果你想保持这样,你需要有2个循环。
否则,如果您将变量更改为:my_array = ["..\\..\\..\\Source\\file1.c", "..\\..\\..\\Source\\file2.c"]
您的代码应该有效。
更新
如果你无法控制my_array
,并且它总是一个项目数组的数组,也许这是最干净的:
my_array.flatten.each {|n| puts n.gsub(/\\/,"//")}
它的作用是在一维中转换二维数组。
答案 1 :(得分:1)
if (changes == null)
{
ThrowArgumentException("changes");
}
Changes = changes;
IEnumerable<int> test = changes;
答案 2 :(得分:0)
正如其他人所指出的那样,你在数组上调用gsub,而不是在其中调用字符串。你想要:
my_array.each {|n| puts n[0].gsub(/\\/,"//")}