重新分配数组元素:语法 (Ruby)
Reassigning Elements of Array: Syntax (Ruby)
我正在 Ruby 中学习并行赋值运算符。当我尝试使用它来交换数组中的值时,我得到了意想不到的结果。无法在线找到此问题的答案,希望有人能阐明这里发生的事情。
第一个例子:
array = [1,2,3]
=> [1, 2, 3]
array[0,1] = array[1,0]
=> []
array
=> [2, 3] #thought this would be = [2,1,3]
array[0] 去了哪里,为什么 Ruby 不交换值?
第二个例子:
array = [1,2,3]
=> [1, 2, 3]
array[0,1] = [1,0]
=> [1, 0]
array
=> [1, 0, 2, 3] #was expecting [1,0,3]
为什么 Ruby 将右侧插入数组而不替换值?
array[0,1]
语法正在选取数组的一部分,从 0
开始,长度为 1
。更长的切片使它更明显。
> a = [1,2,3]
=> [1,2,3]
> a[0,2]
=> [1, 2]
要在第一个示例中以您想要的方式交换,您需要单独指定两个索引。
> a[0], a[1] = a[1], a[0]
=> [2, 1]
> a
=> [2, 1, 3]
在您的第二个示例中,Ruby 将 array[0,1]
切片替换为 [1, 0]
,有效地删除了第一个元素并插入了新的 [1, 0]
。更改为 array[0], array[1] = [1, 0]
也会为您解决这个问题。
并行赋值涉及在运算符的左侧指定多个变量 - 您的第一次尝试很接近,但不是我认为您打算做的。为了获得您期望的行为,您需要编写:
array[0], array[1] = array[1], array[0]
相反,您写的是 array[0, 1]
,它有效地将数组的 "slice" 作为一个对象引用。
我正在 Ruby 中学习并行赋值运算符。当我尝试使用它来交换数组中的值时,我得到了意想不到的结果。无法在线找到此问题的答案,希望有人能阐明这里发生的事情。
第一个例子:
array = [1,2,3]
=> [1, 2, 3]
array[0,1] = array[1,0]
=> []
array
=> [2, 3] #thought this would be = [2,1,3]
array[0] 去了哪里,为什么 Ruby 不交换值?
第二个例子:
array = [1,2,3]
=> [1, 2, 3]
array[0,1] = [1,0]
=> [1, 0]
array
=> [1, 0, 2, 3] #was expecting [1,0,3]
为什么 Ruby 将右侧插入数组而不替换值?
array[0,1]
语法正在选取数组的一部分,从 0
开始,长度为 1
。更长的切片使它更明显。
> a = [1,2,3]
=> [1,2,3]
> a[0,2]
=> [1, 2]
要在第一个示例中以您想要的方式交换,您需要单独指定两个索引。
> a[0], a[1] = a[1], a[0]
=> [2, 1]
> a
=> [2, 1, 3]
在您的第二个示例中,Ruby 将 array[0,1]
切片替换为 [1, 0]
,有效地删除了第一个元素并插入了新的 [1, 0]
。更改为 array[0], array[1] = [1, 0]
也会为您解决这个问题。
并行赋值涉及在运算符的左侧指定多个变量 - 您的第一次尝试很接近,但不是我认为您打算做的。为了获得您期望的行为,您需要编写:
array[0], array[1] = array[1], array[0]
相反,您写的是 array[0, 1]
,它有效地将数组的 "slice" 作为一个对象引用。