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"]]
规则是:
我知道这一点。但是为什么在第二次更新之后,会插入一个元素呢?我知道这一点。但是为什么在第二次更新之后,会插入一个元素呢?