Forum: Ruby Extracting sub elements in array

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
WKC C. (Guest)
on 2007-02-13 19:19
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,
Tim P. (Guest)
on 2007-02-13 19:27
(Received via mailing list)
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 ;)

Blessings,
TwP
Paul D. (Guest)
on 2007-02-13 20:05
(Received via mailing list)
* 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
WKC C. (Guest)
on 2007-02-13 20:23
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
Tim P. (Guest)
on 2007-02-13 21:27
(Received via mailing list)
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
This topic is locked and can not be replied to.