遍历数组并将元素推送到单个新数组中

时间:2018-03-22 16:41:16

标签: arrays ruby

我有一个数组:

["apple", "banana", "animal", "car", "angel"]

我想将以"a"开头的元素推送到单独的数组中。我想回来:

["apple"], ["animal"], ["angel"]

如果我将它们推入我预先创建的空数组中,我只能使它工作。

5 个答案:

答案 0 :(得分:4)

通常,为了从数组中选择符合某些特定条件的元素,请使用select方法。

select返回一个匹配critera或空列表的所有元素的数组,以防这两个元素都没有匹配

示例:

new_array = array.select do |element|
  return_true_or_false_depending_on_element(element)
end

现在,当我们想要将每个元素放在它自己的数组中时,我们可以使用另一个数组上可用的数组方法 - map,它接受​​数组的每个元素并将其转换为另一个元素。在我们的例子中,我们希望获取每个匹配的字符串并将其包装在数组

map用法:

new_array = array.map do |element|
  element_transformation(element) # in order to wrap element just return new array with element like this: [element]
end

回到你的问题。为了验证字符串是否以字母开头,您可以使用start_with?方法,该方法可用于每个字符串

将它们粘合在一起:

strings = ["apple", "banana", "animal", "car", "angel"]

result = strings.select do |string|
  string.start_with?("a")
end.map do |string_that_start_with_a|
  [string_that_start_with_a]
end

puts result

答案 1 :(得分:1)

这是一个高尔夫球版本:

array.grep(/\Aa/).map(&method(:Array))

在把这个聪明的东西投入生产之前我可能会考虑我的观众,因为它可能有点令人困惑。

Array#grep返回与传递的正则表达式匹配的所有元素,在这种情况下,/\Aa/匹配以a开头的字符串。 \A是与字符串开头匹配的正则表达式标记。如果您希望它不区分大小写,可以将其更改为/\Aa/i

&method(:Array)位获取对内核方法Array()的引用,并在数组的每个元素上运行它,将数组中的每个元素包装在自己的数组中。

答案 2 :(得分:0)

array_of_arrays = []
your_array.each do |ele|
  if ele.starts_with?("a")
    array_of_arrays << ele.to_a
  end
end

答案 3 :(得分:0)

我能想到的最简单的是:

arr = %w{ apple banana animal car angel }

arr.map {|i| i.start_with?('a') ? [i] : nil }.compact

=> [["apple"], ["animal"], ["angel"]]

答案 4 :(得分:0)

以下是我在控制台中执行此操作的一些代码:

> arr = ["apple", "banana", "animal", "car", "angel"]
=> ["apple", "banana", "animal", "car", "angel"] 
> a_words = []
=> [] 
arr.each do |word|
  a_words << word if word.chars.first == 'a'
end
=> ["apple", "banana", "animal", "car", "angel"]
> a_words
=> ["apple", "animal", "angel"]

如果你想做一些比第一个字母更复杂的事情,你可能想要使用像这样的正则表达式:

if word.matches(/\Aa/)  # \A is beginning of string