Podana wartość całkowita to np. 10
.Utwórz tablicę składającą się z n elementów na podstawie liczby całkowitej.
Jak utworzyć tablicę składającą się z 10 elementów, takich jak [1,2,3,4,5,6,7,8,9,10]
?
Podana wartość całkowita to np. 10
.Utwórz tablicę składającą się z n elementów na podstawie liczby całkowitej.
Jak utworzyć tablicę składającą się z 10 elementów, takich jak [1,2,3,4,5,6,7,8,9,10]
?
Można tylko splat zakres:
[*1..10]
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Ruby 1.9 pozwala wielu ikonami, co jest dość poręczny:
[*1..3, *?a..?c]
#=> [1, 2, 3, "a", "b", "c"]
+1 dla wielu ikon – megas
To świetnie, ponieważ wcześniej nie zdawałem sobie sprawy: [* 0..0] # => [0] Ale [* 1..0] # => [] – hcarreras
@MichaelKohl - dziękuję - co oznacza znak zapytania? zanim powyższe litery oznaczają? – BKSpurgeon
def array_up_to(i)
(1..i).to_a
end
, który pozwala na:
> array_up_to(10)
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Kolejna trudna droga:
> Array.new(10) {|i| i+1 }
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Jeszcze trudniejsze, jeśli napiszesz to jako 'Array.new (10, &: next) '. –
Jeszcze trudniejsze: 'Array.new (10, & 1.method (: +))' –
Można to zrobić:
array= Array(0..10)
Jeśli chcesz wprowadzić, można użyć to:
puts "Input:"
n=gets.to_i
array= Array(0..n)
puts array.inspect
O uwag metod trudnych:
require 'benchmark'
Benchmark.bm { |x|
x.report('[*..] ') do
[*1000000 .. 9999999]
end
x.report('(..).to_a') do
(1000000 .. 9999999).to_a
end
x.report('Array(..)') do
Array(1000000 .. 9999999)
end
x.report('Array.new(n, &:next)') do
Array.new(8999999, &:next)
end
}
Bądź ostrożny, ta trudna metoda jest wolniejsza, gdy trzy inne podstawowe metody są takie same.
user system total real
[*..] 0.734000 0.110000 0.844000 ( 0.843753)
(..).to_a 0.703000 0.062000 0.765000 ( 0.843752)
Array(..) 0.750000 0.016000 0.766000 ( 0.859374)
Array.new(n, &:next) 1.250000 0.000000 1.250000 ( 1.250002)
Możliwy duplikat [poprawny sposób wypełnić tablicę z rzędem w Ruby] (http://stackoverflow.com/questions/191329/correct-way-to-populate-an-array-with-a -range-in-ruby) –