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
Ruby数组更新操作_Ruby_Arrays - Fatal编程技术网

Ruby数组更新操作

Ruby数组更新操作,ruby,arrays,Ruby,Arrays,请先查看示例代码: arr = [4, 5, 6] arr[2] = ["a","b","c"] # First Update print arr.join(","), ", len=", arr.length, "\n" print arr[2] ,"\n" arr[0..1] = [7,"h","b"] # Second Update print arr.join(","), ", len=", arr.length, "\n" 输出为: 4,5,a,b,c, len=3 abc 7,h,

请先查看示例代码:

arr = [4, 5, 6]
arr[2] = ["a","b","c"] # First Update
print arr.join(","), ", len=", arr.length, "\n"
print arr[2] ,"\n"
arr[0..1] = [7,"h","b"] # Second Update
print arr.join(","), ", len=", arr.length, "\n"
输出为:

4,5,a,b,c, len=3
abc
7,h,b,a,b,c, len=4
第一次更新时,只有元素2更新为“abc”。但在第二次更新中,将3个元素更新为2个现有元素会导致插入一个元素,因此数组长度增加1


我的问题是为什么第一次更新不会导致元素插入?规则是什么?

第一次更新后,用另一个数组替换第三个元素。因此,您的阵列如下所示:

[4,5,a,b,c]


这就是结果数组的长度为3的原因。

在第一次更新后,将第三个元素替换为另一个数组。因此,您的阵列如下所示:

[4,5,a,b,c]


这就是结果数组的长度为3的原因。

区别在于在第二种情况下使用了范围,而不是第一种情况。当在赋值的左侧使用范围作为索引时,Ruby会用右侧数组中的单个元素替换这些元素。当在左侧使用整数作为索引时,该元素将替换为右侧的整个数组

如果您在第一次更新中改为说
arr[2..2]=['a',b',c']
,则数组长度将从3变为5(即数组将变为[4,5',a',b',c'])


这方面的官方文档位于

不同之处在于您在第二种情况下使用了范围,而不是第一种情况。当在赋值的左侧使用范围作为索引时,Ruby会用右侧数组中的单个元素替换这些元素。当在左侧使用整数作为索引时,该元素将替换为右侧的整个数组

如果您在第一次更新中改为说
arr[2..2]=['a',b',c']
,则数组长度将从3变为5(即数组将变为[4,5',a',b',c'])


这方面的官方文档位于第一次更新将数组中的一个元素替换为
arr
,使用
p arr
检查:

[4, 5, ["a", "b", "c"]]
第二次更新使用数组替换数组中的两个元素:

[7, "h", "b", ["a", "b", "c"]]
规则是:

  • 如果与单个整数索引一起使用,则该位置的元素为 替换为任务右侧的内容
  • 如果与范围一起使用,则原始数组中的这些元素是 替换为任务右侧的内容和 右侧本身是一个数组,其元素用于替换。

  • 第一次更新将数组中的一个元素替换为
    arr
    ,使用
    p arr
    签出:

    [4, 5, ["a", "b", "c"]]
    
    第二次更新使用数组替换数组中的两个元素:

    [7, "h", "b", ["a", "b", "c"]]
    
    规则是:

  • 如果与单个整数索引一起使用,则该位置的元素为 替换为任务右侧的内容
  • 如果与范围一起使用,则原始数组中的这些元素是 替换为任务右侧的内容和 右侧本身是一个数组,其元素用于替换。

  • 我知道这一点。但是为什么在第二次更新之后,会插入一个元素呢?我知道这一点。但是为什么在第二次更新之后,会插入一个元素呢?