Javascript Ruby中的Array.prototype.splice
一位朋友问我Ruby中实现JavaScript的Javascript Ruby中的Array.prototype.splice,javascript,ruby,Javascript,Ruby,一位朋友问我Ruby中实现JavaScript的splice方法效果的最佳性能方法。 这意味着阵列本身或副本上没有迭代 “从索引开始,删除长度项并(可选)插入元素。最后在数组中返回删除的项。”使用 至于返回删除的元素,[]=不会这样做。。。您可以编写自己的帮助器方法来执行此操作: class Array def splice(start, len, *replace) ret = self[start, len] self[start, len] = replace
splice
方法效果的最佳性能方法。
这意味着阵列本身或副本上没有迭代
“从索引开始,删除长度项并(可选)插入元素。最后在数组中返回删除的项。”使用
至于返回删除的元素,[]=
不会这样做。。。您可以编写自己的帮助器方法来执行此操作:
class Array
def splice(start, len, *replace)
ret = self[start, len]
self[start, len] = replace
ret
end
end
首先使用提取要删除的零件:
a = [1, 2, 3, 4]
ret = a.slice!(2,2)
这将[1,2]
保留在a
中,而[3,4]
保留在ret
中。然后,使用简单的方法插入新值:
a[2,0] = [:pancakes]
结果是ret
中的[3,4]
,以及a
中的[1,2,:煎饼]
。概括:
def splice(a, start, len, replacements = nil)
r = a.slice!(start, len)
a[start, 0] = replacements if(replacements)
r
end
如果您想要变量行为,也可以使用*替换
:
def splice(a, start, len, *replacements)
r = a.slice!(start, len)
a[start, 0] = replacements if(replacements)
r
end
你还是没有!将
replace
更改为*replace
。然后你得到你的投票。考虑到你写的拼接方法,我得到的结果是[:h,:g],这是不正确的,它应该是[:a,:c,:test,:t,:m]。提示:数组#-比较值,这在这里不好。@kain:为什么它应该是[:a,:c,:test,:t,:m]?我以为您希望它只返回已删除的值?我没有使用Array#-
…我的朋友说Array.prototype.splice将光标定位在开始索引上,从该索引中删除n个元素,可以选择用某个实例(比如一个符号)替换间隙,然后返回数组的其余部分。请参阅原始问题中的示例。也许他对JS方法的看法是错误的?@kain,jtbandes的回答是,一旦replace
参数变为varargs:)就忠实于JavaScript的splice
。它应该返回已删除的元素。
a[2,0] = [:pancakes]
def splice(a, start, len, replacements = nil)
r = a.slice!(start, len)
a[start, 0] = replacements if(replacements)
r
end
def splice(a, start, len, *replacements)
r = a.slice!(start, len)
a[start, 0] = replacements if(replacements)
r
end