我有一个这样的数组:[7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6]
从数组6到0返回数组中每个项目的最简单方法是什么,结果数组如下所示:[1,2,3,4,5,6,7]
数组中的这个位置可以是动态的,例如传入4和9应该返回[11,12,1,2,3,4]
我想知道是否有一种方法可以在Rails api中实现这一点。
提前致谢
EDIT
我们假设没有负数,所以做array[2..-2]
不会有用。
Array#splice
几乎适用于此,但如果第二个位置小于第一个位置,则返回nil
。
答案 0 :(得分:3)
def foo a, min, max
a.rotate(min).first((max - min) % a.length + 1)
end
a = [7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6]
foo(a, 6, 0) # => [1, 2, 3, 4, 5, 6, 7]
foo(a, 4, 9) # => [11, 12, 1, 2, 3, 4]
答案 1 :(得分:2)
class Array
def get_sub_array(start,last)
(start > last) ? (self[start..-1] + self[0..last]) : self[start..last]
end
end
然后
a = [7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6]
a.get_sub_array(6,0)
#[1, 2, 3, 4, 5, 6, 7]
或者如果你不想要补丁
你可以有像
这样的方法def get_sub_array(array, start,last)
(start > last) ? (array[start..-1] + array[0..last]) : array[start..last]
end
a = [7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6]
get_sub_array(a,6,0)
#[1, 2, 3, 4, 5, 6, 7]
答案 2 :(得分:1)
Picasso.with(getApplicationContext())
.load(Pref.getValue(getApplicationContext(),
Const.PREF_PROFILE_PIC, "")).into(iv_profile);
Picasso.with(getApplicationContext())
.load(Pref.getValue(getApplicationContext(),
Const.PREF_COVER_PIC, "")).into(iv_cover);
您也可以使用三元运算符使其成为一个衬垫:
def some_function(some_array,start_val=6, end_val=0)
if end_val > start_val
some_array[start_val,(end_val - start_val)]
else
(some_array[start_val, some_array.size] << some_array[0, (end_val)]).flatten
end
end
答案 3 :(得分:0)
min=6
max=0
arr = [7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6]
result = []
if max<min
result << arr[min..arr.length]
result << arr[0..max]
else
result << arr[min..max]
end
答案 4 :(得分:0)
var date = new Date(response*1000);
答案 5 :(得分:0)
还有更多方法(我倾向于#1)。
a = [7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6]
<强>#1 强>
def foo a, min, max
as = a.size
max += as if max < min
(min..max).map { |i| a[i%as] }
end
foo(a, 6, 0) # => [ 1, 2, 3, 4, 5, 6, 7]
foo(a, 4, 9) # => [11, 12, 1, 2, 3, 4]
<强>#2 强>
def foo a, min, max
max += a.size if max < min
e = a.cycle
min.times { e.next }
(max-min+1).times.map { e.next }
end
foo(a, 6, 0) # => [ 1, 2, 3, 4, 5, 6, 7]
foo(a, 4, 9) # => [11, 12, 1, 2, 3, 4]
答案 6 :(得分:-1)
myArray = [7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6]
myArray[6..-1] returns [1, 2, 3, 4, 5, 6]
myArray[4..9] returns [11,12,1,2,3,4]