仅当第一个元素满足条件时,如何删除数组的开头元素?
How do I remove the beginning elements of my array only if the first element satisfies a condition?
在 Ruby 中,假设我有一组有序的唯一数字
[0, 1, 2, 4, 6, 8, 10]
如果数组的第一个元素是零,我如何从数组的开头删除所有连续的元素,从零开始?也就是说,在上面的示例中,我想删除“0”、“1”和“2”,留下
[4, 6, 8, 10]
但是如果我的数组是
[1, 2, 3, 10, 15]
我希望数组保持不变,因为第一个元素不为零。
简写:
a[0] == 0 ? a[3..-1] : a
加长格式:
if a.first == 0
a[3..(a.size)]
else
a
end
你可以这样做:
x = -1
while my_array.first == x + 1 do
x = my_array.shift
end
请注意 array.shift 与 array.pop 相同,只是它从数组的开头开始工作。
听起来您正试图删除与其 idx 匹配的实体(前提是第一个 idx 为 0)。试试这个:
if array.first == 0
new_array = array.reject.each_with_index{ |item, idx| item == idx }
end
虽然这仅适用于唯一数字的有序数组,但如果您不确定它们是否包括:array = array.sort.uniq
如果我没理解错,那么它可能是一种可能的解决方案:
def foo(array)
if array.first.zero?
array.keep_if.with_index { |e, ind| e != ind }
else
array
end
end
> foo([0, 1, 2, 5, 6, 7])
#=> => [5, 6, 7]
> foo([1, 2, 3])
#=> [1, 2, 3]
您可以混合使用 drop_while
and with_index
以仅删除第一个匹配元素:
[0, 1, 2, 4, 6, 8, 10].drop_while.with_index{|x, i| x == i}
# [4, 6, 8, 10]
[1, 1, 2, 4, 6, 8, 10].drop_while.with_index{|x, i| x == i}
# [1, 1, 2, 4, 6, 8, 10]
请注意,第二个示例中的第二个和第三个元素不会被删除,即使它们等于它们的索引。
丢弃元素,只要它们等于它们的索引:
a=a.drop_while.with_index{|e,i| e==i}
在 Ruby 中,假设我有一组有序的唯一数字
[0, 1, 2, 4, 6, 8, 10]
如果数组的第一个元素是零,我如何从数组的开头删除所有连续的元素,从零开始?也就是说,在上面的示例中,我想删除“0”、“1”和“2”,留下
[4, 6, 8, 10]
但是如果我的数组是
[1, 2, 3, 10, 15]
我希望数组保持不变,因为第一个元素不为零。
简写:
a[0] == 0 ? a[3..-1] : a
加长格式:
if a.first == 0
a[3..(a.size)]
else
a
end
你可以这样做:
x = -1
while my_array.first == x + 1 do
x = my_array.shift
end
请注意 array.shift 与 array.pop 相同,只是它从数组的开头开始工作。
听起来您正试图删除与其 idx 匹配的实体(前提是第一个 idx 为 0)。试试这个:
if array.first == 0
new_array = array.reject.each_with_index{ |item, idx| item == idx }
end
虽然这仅适用于唯一数字的有序数组,但如果您不确定它们是否包括:array = array.sort.uniq
如果我没理解错,那么它可能是一种可能的解决方案:
def foo(array)
if array.first.zero?
array.keep_if.with_index { |e, ind| e != ind }
else
array
end
end
> foo([0, 1, 2, 5, 6, 7])
#=> => [5, 6, 7]
> foo([1, 2, 3])
#=> [1, 2, 3]
您可以混合使用 drop_while
and with_index
以仅删除第一个匹配元素:
[0, 1, 2, 4, 6, 8, 10].drop_while.with_index{|x, i| x == i}
# [4, 6, 8, 10]
[1, 1, 2, 4, 6, 8, 10].drop_while.with_index{|x, i| x == i}
# [1, 1, 2, 4, 6, 8, 10]
请注意,第二个示例中的第二个和第三个元素不会被删除,即使它们等于它们的索引。
丢弃元素,只要它们等于它们的索引:
a=a.drop_while.with_index{|e,i| e==i}