Extracting sub elements in array


#1

Is there a fast way to return a subsection of an array object as there
is the minor function for a Matrix?

For example
testArray = [[1,2,3,4,5],
[7,8,9,10,11]]

How can the elements [[4,5],[10,11]] be extracted?

Thanks,


#2

On 2/13/07, WKC CCC removed_email_address@domain.invalid wrote:

testArray.map {|x| x[-2…-1]}

I don’t know if it is “fast”, but it was certainly quick to write :wink:

Blessings,
TwP


#3
  • WKC CCC (removed_email_address@domain.invalid) wrote:

Is there a fast way to return a subsection of an array object as there
is the minor function for a Matrix?

For example
testArray = [[1,2,3,4,5],
[7,8,9,10,11]]

How can the elements [[4,5],[10,11]] be extracted?

Use the built-in matrix class:

require ‘matrix’

m = Matrix.rows (1…5).to_a, (7…11).to_a

extract the subsection at rows 0…1 and cols 3…4

m.minor(0…1, 3…4) #=> Matrix[[4, 5], [10, 11]]

See the matrix documentation for additional documentation:

http://ruby-doc.org/stdlib/libdoc/matrix/rdoc/index.html


#4

Thanks,

I’ve created the following function as an extention to class Array:

def Section(startRow,nRows,startCol,nCols)
part = self[startRow…startRow+nRows-1]
part = part.map{|x| x[startCol…startCol + nCols-1]}
return part
end

testArray=[[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14],
[15,16,17,18]]

calling testArray.Section(2,2,2,2)

will return [[13,14],[17,18]]

which is essentially what the minor function but on an Array


#5

On 2/13/07, WKC CCC removed_email_address@domain.invalid wrote:

testArray=[[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14],
[15,16,17,18]]

calling testArray.Section(2,2,2,2)

will return [[13,14],[17,18]]

def section( rows, cols )
self.slice(rows).map! {|c| c.slice(cols)}
end

testArray = [
[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15],
[16,17,18,19,20]
]

testArray.section( 2…4, 2…4 )

[[13, 14],
[18, 19]]

Blessings,
TwP