Pet*_*rov 1 ruby arrays syntax assignment-operator parallel-assignment
我现在正在学习 Ruby 中的并行赋值运算符。当我尝试使用它来交换数组中的值时,我得到了意想不到的结果。在网上找不到这个问题的答案,希望有人能够阐明这里发生的事情。
第一个例子:
array = [1,2,3]
=> [1, 2, 3]
array[0,1] = array[1,0]
=> []
array
=> [2, 3] #thought this would be = [2,1,3]
Run Code Online (Sandbox Code Playgroud)
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]
Run Code Online (Sandbox Code Playgroud)
为什么 Ruby 将右侧插入数组而不替换值?
语法array[0,1]是选取数组的一个切片,起始位置为0,长度为1。切片越长,这一点就越明显。
> a = [1,2,3]
=> [1,2,3]
> a[0,2]
=> [1, 2]
Run Code Online (Sandbox Code Playgroud)
要在第一个示例中交换您想要的方式,您需要独立指定两个索引。
> a[0], a[1] = a[1], a[0]
=> [2, 1]
> a
=> [2, 1, 3]
Run Code Online (Sandbox Code Playgroud)
在第二个示例中,Ruby 将array[0,1]切片替换为[1, 0],有效地删除第一个元素并插入新的[1, 0]。更改为array[0], array[1] = [1, 0]也会为您解决这个问题。