FOR Loop with 2 variables

Hi Everyone,
Can anyone pls tell me how to use 2 variables (objects) in FOR Loop?
Normally in most programming languages it will be like,
for(i=1,j=1;i<=5;i++,j++)
Whats the equivalent for above statement in Rails? i have two objects
with same number of fields but different values.
@original_object & @modified_object

Thanks in Advance,

Regards,
VASANTH

Hi –

On Tue, 11 Mar 2008, Vasanthakumar C. wrote:

Hi Everyone,
Can anyone pls tell me how to use 2 variables (objects) in FOR Loop?
Normally in most programming languages it will be like,
for(i=1,j=1;i<=5;i++,j++)
Whats the equivalent for above statement in Rails? i have two objects
with same number of fields but different values.
@original_object & @modified_object

There are several possibilities, depending on exactly what you want to
do (which I’m not totally clear on). One would be:

fields.size.times do |i|
j = i

end

though I suspect that if you really just need an index, you wouldn’t
need two variables.

You could also look into Array#zip. Beyond that I’d need to know more
about what you’re trying to do and how your data are organized.

David


Upcoming Rails training from David A. Black and Ruby Power and Light:
ADVANCING WITH RAILS, April 14-17 2008, New York City
CORE RAILS, June 24-27 2008, London (Skills Matter)
See http://www.rubypal.com for details. Berlin dates coming soon!

Vasanthakumar C. wrote:

for(i=1,j=1;i<=5;i++,j++)
Whats the equivalent for above statement in Rails?

Thanks in Advance,

Regards,
VASANTH

There are many types of loops. For the one in your example you could
say:

until 1 <= 5 do


end

or

1.upto(5) do |x|


end

To use two variables you are going to have to use two loops - there is
no way that I know of to write a single loops that counts double.

It also depends on what you are counting? If you have a list of stuff
then the loop could be written as:

stuff.each do |x|


end

What are you trying to do with the @modified and @oringinal objects? Are
you trying to compare their fields?

Hi David and Nantz,
this is what i am trying to do
@window_data_original = Window.getGeneralData(building_id)
@window_data_modified =
ScopeOfWorkAction.getRetrofittedData(building_id,retrofit_cost_data.module_id,Window.column_names,window_data_original)
So after the above two statments, i will have two different objects with
same fields but different values.
Now, these are multi-dimensional array objects (since a building can
have any number of windows). My project is a scientific project, where i
need to
calculate some parameter’s like below (just giving a sample):

for window_data_original in @window_data_original
calculation_value1 = window_data_original.size -
window_data_modified.size
total = total + calculation_value1
end

Hope, i am clear this time. Please help me. Thanks in advance.

Regards,
VASANTH

Hi –

On Tue, 11 Mar 2008, Vasanthakumar C. wrote:

need to
calculate some parameter’s like below (just giving a sample):

for window_data_original in @window_data_original

That’s some weird loop variable naming :slight_smile:

calculation_value1 = window_data_original.size -
window_data_modified.size
total = total + calculation_value1
end

If it’s two arrays them you can zip them, or just use an index and
fish things out:

@w_d_orig.each_with_index do |wdo,i|
wdm = @w_d_modified[i]
# etc.
end

(if I’m understanding correctly).

David


Upcoming Rails training from David A. Black and Ruby Power and Light:
ADVANCING WITH RAILS, April 14-17 2008, New York City
CORE RAILS, June 24-27 2008, London (Skills Matter)
See http://www.rubypal.com for details. Berlin dates coming soon!

Hi,
Hope this would be clear,

for employee in @employees
calculation_value1 = employee.size - employee.size

first is original value (employee.size) and second is modified

value (employee.size)
total = total + calculation_value1
end

Here, @employees is an two-dimensional array of 50 employees & so the
for loop will run for 50 times. Now, i want to iterate through both
arrays simultaneously so that i will get the final result.
eg:- (consider 5th employee)
calculation_value1 = original_employee[5].size -
modified_employee[5].size

Hope you understand my problem and help me out of this.

Thanks in advance.

Regards,
Vasanth

CSK Vasanth wrote:

for employee in @employees
calculation_value1 = employee.size - employee.size

first is original value (employee.size) and second is modified

value (employee.size)
total = total + calculation_value1
end

Combining that with:

eg:- (consider 5th employee)
calculation_value1 = original_employee[5].size -
modified_employee[5].size

And the examples everyone has provided, you have choices like:

@orig_employees.each_with_index |orig_employee, i|
mod_employee = @mod_employees[i]
calc_val1 = orig_employee.size - mod_employee.size
total = total + calc_val1
end

or:

(0…@orig_employees.length).each |i|
orig_employee = @orig_employees[i]
mod_employee = @mod_employees[i]
calc_val1 = orig_employee.size - mod_employee.size
total = total + calc_val1
end

(yes, that was 3 dots in the range, not 2)

or:

@orig_employees.length.times |i|
orig_employee = @orig_employees[i]
mod_employee = @mod_employees[i]
calc_val1 = orig_employee.size - mod_employee.size
total = total + calc_val1
end

There are many ways you can do this using the solutions provided. Note
that you don’t need 2 indexes, since you say both arrays will be the
same length. One index is enough to refer to both arrays.