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.
0395dce49ee7fa03ad9c10e8105d9245?d=identicon&s=25 WKC CCC (wkc)
on 2007-02-13 18: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,
4d5b5dd4e263d780a5dfe7ac8b8ac98c?d=identicon&s=25 Tim Pease (Guest)
on 2007-02-13 18:27
(Received via mailing list)
On 2/13/07, WKC CCC <wai-kee.chung@uk.bnpparibas.com> wrote:
>
testArray.map {|x| x[-2..-1]}

I don't know if it is "fast", but it was certainly quick to write ;)

Blessings,
TwP
Ff260830c27224f0e15f37362a6256d0?d=identicon&s=25 Paul Duncan (Guest)
on 2007-02-13 19:05
(Received via mailing list)
* WKC CCC (wai-kee.chung@uk.bnpparibas.com) 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
0395dce49ee7fa03ad9c10e8105d9245?d=identicon&s=25 WKC CCC (wkc)
on 2007-02-13 19: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
4d5b5dd4e263d780a5dfe7ac8b8ac98c?d=identicon&s=25 Tim Pease (Guest)
on 2007-02-13 20:27
(Received via mailing list)
On 2/13/07, WKC CCC <wai-kee.chung@uk.bnpparibas.com> 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.