如何将数组中的前n个元素混洗

Vij*_*min 0 ruby arrays

让:

example = [1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)

我想改组它的前五个元素.其他元素必须保持在同一索引下,例如:

[2,4,1,3,5,6,7,8,9]
[3,1,4,5,2,6,7,8,9]
# etc
Run Code Online (Sandbox Code Playgroud)

我试过了example.shuffle,但它洗了所有元素.

Ste*_*fan 10

您可以通过以下方式获得前5个元素[]:

example[0, 5]
#=> [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

同样,您可以通过以下方式设置前5个元素[]=:

example[0, 5] = [5, 4, 3, 2, 1]
#=> [5, 4, 3, 2, 1]

example
#=> [5, 4, 3, 2, 1, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

所以对于shuffle前5个元素,您可以使用:

example[0, 5] = example[0, 5].shuffle
#=> [3, 2, 1, 4, 5]

example
#=> [3, 2, 1, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

请注意,这example[0, 5].shuffle!无效,因为Array#[]返回一个新数组而不是对子数组的引用(在Ruby中没有这样的东西).