Возвращает самый большой элемент из массивов в массиве - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть три массива, которые объединены в другой массив.Массивы имеют разную длину, размеры и типы данных.Например:

arr1 = [
  ["foooooo", "barrrrrr", 12121113222331144450],
  ["fooollllll", "barrrrrr", 5555555555]
]

animals = [
  ['Hector', 'Chihuahua', 7],
  ['Max', 'Chihuahua', 9]
]

people = [
  %w(Jesse\ James 123\ Homewood\ Home\ Drive San\ Francisco\ CA 510-555-1234 510-123-4567),
  %w(Thomas\ Masters 123\ Sweetwood\ Drive San\ Francisco\ CA 510-656-6589 510-123-1236)
]

friends = [
  %w(first_name last_name telephone address city state zip_code birthdate salary),
  [
    'Jessica',
    'Simpson',
    '485-123-456',
    '9210 Cheery Avenue',
    'Tyler',
    'TX',
    '12345',
    '7/6/81',
    '500'
  ],
  [
    'Alexis',
    'Tyler',
    '123-123-789',
    '9210 Simpson Avenue',
    'Chandler',
    'AZ',
    '62345',
    '8/2/72',
    '1200'
  ]
]
  • arr1 имеет шесть массивов с тремя элементами в каждом массиве.
  • arr2 имеет пять массивов с шестью элементами в каждом массиве.
  • arr3 имеет девять массивов с пятью элементами в каждом массиве.
  • arr4 имеет arr1, arr2, arr3.

Я пытаюсьитерировать эти три массива и возвращать символы одного самого длинного элемента из каждого массива массивов.Я хочу вернуть arr1 имеет [sic] двадцать символов.

i = 0 
while i < arr4_arrays.length
  len = arr4_arrays[i].max_by(&:length)
  len_m = len.map(&:to_s).max_by(&:length).length.to_i
  i+=1
  puts len_m
  puts "\n" 
end

Мой код не входит в подмассивы.Возвращает наибольшее число из каждого из первых массивов.Может ли кто-нибудь помочь с этим?

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Похоже, вы хотите следующее, но я не могу быть уверен в том, что спрашивают.

def longest(arr)
  arr.map { |a| a.flatten.map(&:to_s).max_by(&:size) }
end

longest animals
  #=> ["Chihuahua", "Chihuahua"] 
longest people
  #=> ["123 Homewood Home Drive", "123 Sweetwood Drive"]
longest friends
  #=> ["first_name", "9210 Cheery Avenue",
  #    "9210 Simpson Avenue"] 
0 голосов
/ 27 февраля 2019

Похоже, вы хотите следующее, но я не могу быть уверен в том, о чем идет речь.

def longest(arr)
  arr.map { |a| a.flatten.max_by { |e| e.to_s.size } }
end

longest arr1
  #=> [12121113222331144450, "fooollllll"] 
longest animals
  #=> ["Chihuahua", "Chihuahua"] 
longest people
  #=> ["123 Homewood Home Drive", "123 Sweetwood Drive"] 
longest friends
  #=> ["first_name", "9210 Cheery Avenue",
  #    "9210 Simpson Avenue"]

или, возможно,

def longest(arr)
  arr.map { |a| a.flatten.map { |e| e.to_s.size }.max }
end

longest arr1
  #=> [20, 10] 
longest animals
  #=> [9, 9] 
longest people
  #=> [23, 19] 
longest friends
  #=> [10, 18, 19] 

или, может быть, даже

def longest(arr)
  arr.each_with_object([]) { |a,ar|
    a.flatten.max_by { |e| e.to_s.size }.
      yield_self { |e| ar << [e, e.to_s.size] } }
end

longest arr1 
  #=> [[12121113222331144450, 20],
  #    ["fooollllll", 10]]      
longest animals
  #=> [["Chihuahua", 9],
  #    ["Chihuahua", 9]] 
longest people
  #=> [["123 Homewood Home Drive", 23],
  #    ["123 Sweetwood Drive", 19]] 
longest friends
  #=> [["first_name", 10],
  #    ["9210 Cheery Avenue", 18],
  #    ["9210 Simpson Avenue", 19]] 
0 голосов
/ 27 февраля 2019

Для этой задачи используйте Ruby Iterators.

Используя следующий пример:

arrays = [[['foo','foo','foo','foo','foo','fooOOO'],
           ['foo','foo','foo','foo','foo','fooIIIIIII']],
          [['baa','baa','baa','baa','baa','baaUUU'], 
           ['baa','baa','baa','baa','baa','baaAAAAAAAA']]]

Выполните итерацию так:

arrays.each do |array|
  array.each do |item|
    puts item.max_by(&:length).length
  end
end

Вывод:

6
10
6
11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...