[#395238] rubygem: ispunity (unite all your internet connections) — Arun Tomar <tomar.arun@...>

Dear friends,

12 messages 2012/05/01

[#395250] Overwriting one Ruby array or arrays with another — Craig Law <lists@...>

Hi

14 messages 2012/05/02

[#395258] array of strings - finding letter combinations — "Sebastjan H." <lists@...>

Hi All,

16 messages 2012/05/02

[#395357] Why Enumerator#next does not return more than one value? — Földes László <lists@...>

If I have an Enumerator which yields elements of a mathematical series

10 messages 2012/05/07

[#395373] How to use Data_Wrap_Struct to assign the DATA VALUE to an exsiting Ruby object? — Iñaki Baz Castillo <ibc@...>

Hi, my code receives an arbitrary klass name (provided by the user)

8 messages 2012/05/07

[#395429] passing via instance variable or regular () — sam jam <lists@...>

def first

10 messages 2012/05/10

[#395463] I'm looking for a Metaprogramming Project — Phil Stone <lists@...>

Hello,

19 messages 2012/05/11

[#395548] A million reasons why Encoding was a mistake — Marc Heiler <lists@...>

Newcomer wants to try Ruby.

15 messages 2012/05/15
[#395561] Re: A million reasons why Encoding was a mistake — Ryan Davis <ryand-ruby@...> 2012/05/15

[#395595] Re: A million reasons why Encoding was a mistake — Brian Candler <lists@...> 2012/05/16

I will add that the OP is not entirely alone in his opinion.

[#395551] How to ensure that a block runs entirely after other threads? (Thread.exclusive does not "work") — Iñaki Baz Castillo <ibc@...>

Hi, I expected that in the following example code, thread t1 would not

8 messages 2012/05/15

[#395575] GUI with ruby on windows — David Acosta <lists@...>

hello friends, i am a begginer and i have a litlle question, how can i

17 messages 2012/05/16

[#395604] what is going wrong here? — roob noob <lists@...>

Notice the initialization of both classes in each of the examples, if

20 messages 2012/05/16

[#395646] rb_gc_register_address() or rb_gc_mark()? — Iñaki Baz Castillo <ibc@...>

Hi, I've bad experiences with rb_gc_register_address(), it does never

16 messages 2012/05/17

[#395686] reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...>

Hi,

19 messages 2012/05/18
[#395694] Re: reading from and writing to a Unicode encoded file — Regis d'Aubarede <lists@...> 2012/05/18

Hello,

[#395697] Re: reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...> 2012/05/18

Regis d'Aubarede wrote in post #1061272:

[#395698] Re: reading from and writing to a Unicode encoded file — Regis d'Aubarede <lists@...> 2012/05/18

Sebastjan H. wrote in post #1061276:

[#395699] Re: reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...> 2012/05/18

Regis d'Aubarede wrote in post #1061277:

[#395750] Re: reading from and writing to a Unicode encoded file - issues when using Shoes — "Sebastjan H." <lists@...> 2012/05/21

Hi,

[#395754] Re: reading from and writing to a Unicode encoded file - issues when using Shoes — "Sebastjan H." <lists@...> 2012/05/21

Sebastjan H. wrote in post #1061483:

[#395740] ? Ruby through CGI and Rails — Shaun Lloyd <list@...>

Hi everybody,

22 messages 2012/05/21
[#395764] Re: Ruby through CGI and Rails — Brian Candler <lists@...> 2012/05/21

Shaun Lloyd wrote in post #1061455:

[#395786] Re: Ruby through CGI and Rails — Shaun Lloyd <list@...> 2012/05/22

On 22/05/12 03:37, Brian Candler wrote:

[#395838] Re: Ruby through CGI and Rails — Brian Candler <lists@...> 2012/05/23

Shaun Lloyd wrote in post #1061602:

[#395787] Changing self class from inside a method?? — David Madison <lists@...>

Let's start off with the assumption I want a method that allows an

10 messages 2012/05/22

[#395841] Memory-efficient set of Fixnums — George Dupre <lists@...>

Hi,

25 messages 2012/05/23

[#395883] looking for a ruby idiom : r=foo; return r if r — botp <botpena@...>

Hi All,

11 messages 2012/05/24

[#395966] Am I justified to use a global variable if it must be used in all scopes? — Phil Stone <lists@...>

Hello,

12 messages 2012/05/27

[#396010] does this leak more than the size of the string via timing side channels — rooby shoez <lists@...>

string1 = "string"

16 messages 2012/05/29

[#396038] Is it possible to avoid longjmp in exceptions, Thread#kill, exit(), signals? — Iñaki Baz Castillo <ibc@...>

Hi, my Ruby C extension runs a C loop (libuv) without GVL. At some

8 messages 2012/05/29

Re: Overwriting one Ruby array or arrays with another

From: Martin DeMello <martindemello@...>
Date: 2012-05-02 04:38:25 UTC
List: ruby-talk #395256
On Tue, May 1, 2012 at 9:14 PM, Craig Law <lists@ruby-forum.com> wrote:
> Martin
>
> Just as a matter of interest if I was forced to continue using an array
> of arrays such as [1, 1, "X", "20120502"] what would be the most
> efficient way of overwriting the array with another array as described
> in my second post (the only reason I ask is that my code at the moment
> is spitting out an array of arrays and I'm going to have to work out how
> to spit out the hashes in an ordered manner to use the more efficient
> has method you've described). Can I use a similar update method as
> you've done with hashes?

No, it's a bit more work if you want to use arrays that way, since you
don't have a trivial "find the cell with coordinates x, y" method.
Assuming that arrays a and b are sorted first by x and then by y, you
could write a helper method that did a binary search on array a (as a
side note, ruby does implement < and > for arrays, and the elements
are compared pairwise starting from the first one), and then say

def find_in_grid(array, x, y)
  # return the index of the cell starting [x, y, ...] if it is found,
otherwise nil
end

b.each do |cell|
  index = find_in_grid(a, cell[0], cell[1])
  if index
    a[index] = cell
  end
end

find_in_grid can be implemented using a binary search, or you could
maintain some sort of (e.g. pointers to the start of each grid row) if
you want to update it frequently. Also, note that if there is an (x,
y) in b that is *not* in a, inserting it will be an additional problem
since you have to maintain the sorted order and inserting into the
middle of an array is relatively expensive. Of course, all this might
just be premature optimisation - if the grid update is not slowing
your code down, do the simplest thing that could work, which is
convert a and b into hashes, update, and then convert back into an
array. (It might even be the fastest thing to do, if you have a dense
grid and a lot of updates).

To convert an array to a hash:

hash = {}
a.each do |cell|
  x, y, *rest = cell
  hash[[x, y]] = rest
end

and back:

hash.keys.sort.map {|k| [k] + hash[k]}

Where sorting the keys of the hash ensures that your array is spat out
in the proper order.

martin

In This Thread