Я думаю, что ваш код Ruby в порядке, в зависимости от версии Ruby, в которой вы работаете.
Начиная с:
class Investor
def annual_return(i)
i * i
end
end
investor = Investor.new
В Ruby 1.9+, это будет работать:
test = Hash[ (1..5).map { |x| [x, investor.annual_return(x)] } ]
test # => {1=>1, 2=>4, 3=>9, 4=>16, 5=>25}
Однако до 1,9, Hash не преобразовать массив массивов, содержащий пары ключ/значение , поэтому нам нужно было немного поучаствовать, и flatten
вложенные элементы в единый массив, затем «взорвать» те элементы для хэша:
test = Hash[ *(1..5).map { |x| [x, investor.annual_return(x)] }.flatten ]
test # => {1=>1, 2=>4, 3=>9, 4=>16, 5=>25}
Результат тот же, это просто меньше хлопот в эти дни.
И, просто чтобы показать, что делает рубин, как мы строим Хэш таким образом:
(1..5).map { |x| [x, investor.annual_return(x)] }
# => [[1, 1], [2, 4], [3, 9], [4, 16], [5, 25]]
(1..5).map { |x| [x, investor.annual_return(x)] }.flatten
# => [1, 1, 2, 4, 3, 9, 4, 16, 5, 25]
Итак, вы хотите отобразить с 1 по 6 на 'self.investor.annual_return (1)' через 'self.investor.annual_return (6)' as '{1 => self.investor.annual_return (1), 2 = > self.investor.annual_return (2) ... '? – Beartech
annual_return вытаскивает значение массива, которое вычисляет процентное значение компаундирования.В этом случае я собираю хеш для создания этого без фактического ввода: 1 => 10720.00, 2 => 11491.84, 3 => 12319.25, 4 => 13206.24, 5 => 14517.09 – theGrayFox
Тогда @ennuikiller - это ответьте, что хотите. Мне пришлось искать список, но похоже, что определение в Википедии содержит «предикатную статью», которую я не вижу в вашем примере. Как и в «итерации с 1 по 5, и сделайте число ключом и возвратом функции этого числа значение, НО только если некоторое предложение предиката также истинно», их пример python: «S = [2 * x для x в диапазон (101), если x ** 2> 3] ', а их пример Ruby:' (1..100). select {| x | x ** 2> 3} .collect {| x | 2 * x} ' – Beartech