如何在数组中的字符串元素上应用gsub?

时间:2015-11-19 14:54:10

标签: ruby-on-rails arrays ruby

例如,我有一个结构如下的数组:

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)

有什么想法吗?

3 个答案:

答案 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(/\\/,"//")}