![]() |
filling an array excepted first and last position...
ldom = 30 # variable (last day of a month...)
# array init to 0 @obk = [] 1.step(ldom, 1) do |i| @obk[i] = 0 end I am filling an array as follows (part of a larger filling scheme) : ---- #fiiling the array upon another array content # but I'd like to AVOID filling the first and last position in this loop.... obdays.each do |bd| @obk[bd] = 1 end ------ # ajusting first and last position (in the larger scheme) @obk[obdays.first] += -1 @obk[obdays.last] += -2 |
Re: filling an array excepted first and last position...
> ldom = 30 # variable (last day of a month...)
> > # array init to 0 > @obk = [] > 1.step(ldom, 1) do |i| > @obk[i] = 0 > end Why not: @obk = Array.new(ldom,0) > I am filling an array as follows (part of a larger filling scheme) : > ---- > #fiiling the array upon another array content > # but I'd like to AVOID filling the first and last position in this loop.... > obdays.each do |bd| > @obk[bd] = 1 > end <...> Not sure what are you trying to do here, but maybe something like this may suit you? @obk.fill(1,ldom-1){|i| obdays[i]} Regards, Rimantas -- http://rimantas.com/ |
Re: filling an array excepted first and last position...
Josselin wrote:
> ldom = 30 # variable (last day of a month...) > > # array init to 0 > @obk = [] > 1.step(ldom, 1) do |i| > @obk[i] = 0 > end You could do also @obk = Array.new(ldom) { 0 } > > I am filling an array as follows (part of a larger filling scheme) : > ---- > #fiiling the array upon another array content > # but I'd like to AVOID filling the first and last position in this > loop.... > obdays.each do |bd| > @obk[bd] = 1 > end hmm... there are maybe better ways for this, but I would try: (1..@obd.size-2).each {|i| puts @obk[i] } HTH, Peter http://www.rubyrailways.com |
Re: filling an array excepted first and last position...
On 20.10.2006 09:59, Josselin wrote:
> ldom = 30 # variable (last day of a month...) > > # array init to 0 > @obk = [] > 1.step(ldom, 1) do |i| > @obk[i] = 0 > end @obk = Array.new(ldom, 0) > I am filling an array as follows (part of a larger filling scheme) : > ---- > #fiiling the array upon another array content > # but I'd like to AVOID filling the first and last position in this > loop.... > obdays.each do |bd| > @obk[bd] = 1 > end > ------ > # ajusting first and last position (in the larger scheme) > @obk[obdays.first] += -1 > @obk[obdays.last] += -2 I am not exactly sure what problem you have with this approach. Here is a different one obdays.each_with_index do |bd, idx| case idx when 0 # ignore, @obk[bd] is 0 already when obdays.length - 1 # set to 1 + (-2) = -1 @obk[bd] = -1 else @obk[bd] = 1 end end Does that help? robert |
Re: filling an array excepted first and last position...
On 10/20/06, Josselin <josselin@wanadoo.fr> wrote:
> ldom = 30 # variable (last day of a month...) > > # array init to 0 > @obk = [] > 1.step(ldom, 1) do |i| > @obk[i] = 0 > end > > I am filling an array as follows (part of a larger filling scheme) : > ---- > #fiiling the array upon another array content > # but I'd like to AVOID filling the first and last position in this loop.... > obdays.each do |bd| > @obk[bd] = 1 > end How about: @obk = Array.new(ldom, 0) obdays[1..-2].to_a.each{|bd| @obk[bd] = 1} to_a just in case obdays is empty, in which case obdays[1..-2] return nil. I don't know why Array#[] with a range cannot just always return []. And don't worry about creating a new object, obdays and obdays[1..-2] actually share storage. -- Tomasz Wegrzanowski [ http://t-a-w.blogspot.com/ ] |
Re: filling an array excepted first and last position...
On 2006-10-20 09:59:58 +0200, Josselin <josselin@wanadoo.fr> said:
> ldom = 30 # variable (last day of a month...) > > # array init to 0 > @obk = [] > 1.step(ldom, 1) do |i| > @obk[i] = 0 > end > > I am filling an array as follows (part of a larger filling scheme) : > ---- > #fiiling the array upon another array content > # but I'd like to AVOID filling the first and last position in this loop.... > obdays.each do |bd| > @obk[bd] = 1 > end > ------ > # ajusting first and last position (in the larger scheme) > @obk[obdays.first] += -1 > @obk[obdays.last] += -2 thanks to all of you, i'll try all your clues... Ruby is incredible... you can writing as in any C, C++, java multi lines routine.. then shrink it to a minimal line... that's why newbie ask for well-trained support at first then may require guru help !! |
Re: filling an array excepted first and last position...
On 2006-10-20 10:26:50 +0200, "Rimantas Liubertas" <rimantas@gmail.com> said:
>> ldom = 30 # variable (last day of a month...) >> >> # array init to 0 >> @obk = [] >> 1.step(ldom, 1) do |i| >> @obk[i] = 0 >> end > > Why not: > > @obk = Array.new(ldom,0) yes , it's better .... avoiding @obk[0] = nil in my writing... > > >> I am filling an array as follows (part of a larger filling scheme) : >> ---- >> #fiiling the array upon another array content >> # but I'd like to AVOID filling the first and last position in this loop.... >> obdays.each do |bd| >> @obk[bd] = 1 >> end > <...> > > Not sure what are you trying to do here, but maybe something like this > may suit you? > > @obk.fill(1,ldom-1){|i| obdays[i]} obdays are all days in a given period in a month (ex : 2 to 6 november) I need to fill @obk[3] = 1 ...... @obk[5] = 1 # booked but @obk[2] += -1 (in value) @obk[6] += -2 (out value) why adding these values ? because on november 6, I can also have late another booking period starting so I will get @obk[6] += 1 (in value)... in which case @obk[6] will be -3 finally I got my array for november from 1 to 30 Day 1 2 3 4 5 6 7 8 9 ...... value 0 -1 1 1 1 -3 1 1 1 ..... these values are used in a javascript calendar to fix the CSS class for display 0 no booking color -1 half day starting 1 booked day -3 half day ending / half day starting ... -2 half day ending that's it.... > > > Regards, > Rimantas |
Re: filling an array excepted first and last position...
On 2006-10-20 10:32:18 +0200, Robert Klemme <shortcutter@googlemail.com> said:
> On 20.10.2006 09:59, Josselin wrote: >> ldom = 30 # variable (last day of a month...) >> >> # array init to 0 >> @obk = [] >> 1.step(ldom, 1) do |i| >> @obk[i] = 0 >> end > > @obk = Array.new(ldom, 0) better , avoiding @obk[0] = nil ... > >> I am filling an array as follows (part of a larger filling scheme) : >> ---- >> #fiiling the array upon another array content >> # but I'd like to AVOID filling the first and last position in this loop.... >> obdays.each do |bd| >> @obk[bd] = 1 >> end >> ------ >> # ajusting first and last position (in the larger scheme) >> @obk[obdays.first] += -1 >> @obk[obdays.last] += -2 > > I am not exactly sure what problem you have with this approach. Here > is a different one > > obdays.each_with_index do |bd, idx| > case idx > when 0 > # ignore, @obk[bd] is 0 already > when obdays.length - 1 > # set to 1 + (-2) = -1 > @obk[bd] = -1 > else > @obk[bd] = 1 > end > end > > Does that help? > > robert yes and no, I cannot test @obk[bd] == 0 as it may change.... as indicated in one of my response post |
Re: filling an array excepted first and last position...
On 20.10.2006 13:35, Josselin wrote:
> On 2006-10-20 10:32:18 +0200, Robert Klemme <shortcutter@googlemail.com> > said: > >> On 20.10.2006 09:59, Josselin wrote: >>> ldom = 30 # variable (last day of a month...) >>> >>> # array init to 0 >>> @obk = [] >>> 1.step(ldom, 1) do |i| >>> @obk[i] = 0 >>> end >> >> @obk = Array.new(ldom, 0) > better , avoiding @obk[0] = nil ... >> >>> I am filling an array as follows (part of a larger filling scheme) : >>> ---- >>> #fiiling the array upon another array content >>> # but I'd like to AVOID filling the first and last position in this >>> loop.... >>> obdays.each do |bd| >>> @obk[bd] = 1 >>> end >>> ------ >>> # ajusting first and last position (in the larger scheme) >>> @obk[obdays.first] += -1 >>> @obk[obdays.last] += -2 >> >> I am not exactly sure what problem you have with this approach. Here >> is a different one >> >> obdays.each_with_index do |bd, idx| >> case idx >> when 0 >> # ignore, @obk[bd] is 0 already >> when obdays.length - 1 >> # set to 1 + (-2) = -1 >> @obk[bd] = -1 >> else >> @obk[bd] = 1 >> end >> end >> >> Does that help? >> >> robert > > yes and no, I cannot test @obk[bd] == 0 as it may change.... as > indicated in one of my response post ??? There is no test for @obk[bd] == 0 in the code above. It's a bit difficult to guess what you really want with the information I have seen. Cheers robert |
Re: filling an array excepted first and last position...
On 2006-10-20 10:54:24 +0200, "Tomasz Wegrzanowski"
<tomasz.wegrzanowski@gmail.com> said: > On 10/20/06, Josselin <josselin@wanadoo.fr> wrote: >> ldom = 30 # variable (last day of a month...) >> >> # array init to 0 >> @obk = [] >> 1.step(ldom, 1) do |i| >> @obk[i] = 0 >> end >> >> I am filling an array as follows (part of a larger filling scheme) : >> ---- >> #fiiling the array upon another array content >> # but I'd like to AVOID filling the first and last position in this loop.... >> obdays.each do |bd| >> @obk[bd] = 1 >> end > > How about: > @obk = Array.new(ldom, 0) > obdays[1..-2].to_a.each{|bd| @obk[bd] = 1} interesting but when I enter this command obdays is already a range : > obdays = > 2..6 so I want to do someting like that : obdays[3..5].to_a.each{|bd| @obk[bd] = 1} starting the position after the first in the range and ending with the position before the last like obdays[start+1..end-1].to_a.each{|bd| @obk[bd] = 1} ? > > to_a just in case obdays is empty, in which case obdays[1..-2] return nil. > I don't know why Array#[] with a range cannot just always return []. > > And don't worry about creating a new object, > obdays and obdays[1..-2] actually share storage. |
| All times are GMT. The time now is 03:30 PM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.