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 
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.