Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 具有相似项的Ruby数组_Arrays_Ruby - Fatal编程技术网

Arrays 具有相似项的Ruby数组

Arrays 具有相似项的Ruby数组,arrays,ruby,Arrays,Ruby,我有两个数组 Device = ["Washington DC","Newyork","San Diego","Florida"] Device1 = ["Washington DC","Newyork","San Diego","Florida"] 我这样做是为了从其中一个数组的元素中删除空格 Device.each do |x| x.gsub!(' ','') puts x end 其他数组元素中的空格也已删除。当我对两个数组进行puts时,这就是我得到的结果 ["Washin

我有两个数组

Device = ["Washington DC","Newyork","San Diego","Florida"]

Device1 = ["Washington DC","Newyork","San Diego","Florida"]
我这样做是为了从其中一个数组的元素中删除空格

Device.each do |x|
  x.gsub!(' ','')
  puts x
end
其他数组元素中的空格也已删除。当我对两个数组进行puts时,这就是我得到的结果

["WashingtonDC","Newyork","SanDiego","Florida"]
["WashingtonDC","Newyork","SanDiego","Florida"]

请告诉我我做错了什么,或者我应该怎么做,只从数组的一个元素中删除空格

很可能您的数组不包含不同的字符串,而是引用同一个字符串对象。修改一个事件时,将修改所有事件

string = "a reference"
array_1 = [string]
array_2 = [string]

array_1[0].gsub!(" ", "")

puts array_1 #> areference
puts array_2 #> areference
这是因为在两个数组中都有对同一字符串对象的引用,并且在原地修改它

puts array_1[0].object_id == array_2[0].object_id #> true
试试下面的方法,看看有什么不同

string_1 = "now it works"
array_1 = [string_1]
string_2 = "now it works"
array_2 =[string_2]

array_1[0].gsub!(" ", "")
puts array_1 #> nowitworks
puts array_2 #> now it works
您还可以创建一个新数组,并保留原始数组及其包含的对象不变:

array_1 = ["hey there"]
array_1_no_spaces = array_1.map do |string|
  string.gsub(" ", "") # just gsub, not gsub!
end
代码说明:请遵循最佳实践,并以小写形式命名变量:

device
list_of_something
...
CamelCase样式用于类:

class Device
end
如果已将相同的值分配给不同的变量,如下所示:

device = ["Washington DC","Newyork","San Diego","Florida"]
device1 = ["Washington DC","Newyork","San Diego","Florida"]
那么下面的代码肯定可以正常工作:

执行上述代码后,变量如下所示:

> device
#=> ["WashingtonDC", "Newyork", "SanDiego", "Florida"] 
> device1
#=> ["Washington DC", "Newyork", "San Diego", "Florida"]
但是

若通过变量为变量赋值,则每个变量包含相同的对象

> array = ["Washington DC","Newyork","San Diego","Florida"]
#=> ["Washington DC", "Newyork", "San Diego", "Florida"] 
> device = array
> device1 = array
> array.object_id
#=> 8031080 
> device.object_id
#=> 8031080 
> device1.object_id
#=> 8031080 
因此,当您对任何变量(如数组、设备或设备)执行任何操作1时,它将反映所有变量

您需要复制对象的副本。可以指定如下内容:

> array = ["Washington DC","Newyork","San Diego","Florida"]
> device = array.dup
> device1 = array.dup

> array.object_id
#=> 7077120 
> device.object_id
#=> 7005100 
> device1.object_id
#=> 6977660 

我希望现在这个简单的答案能让你明白易懂。

非常感谢它的有效性……也感谢你对最佳实践的建议我会注意的:这有什么错?您告诉我们,而不是我们告诉您。您可以使用delete“”代替gsub,请下次发布实际代码,因为提供的示例不会产生提供的结果。@engineersmnky当然。。谢谢
> array = ["Washington DC","Newyork","San Diego","Florida"]
> device = array.dup
> device1 = array.dup

> array.object_id
#=> 7077120 
> device.object_id
#=> 7005100 
> device1.object_id
#=> 6977660