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