有没有快速的方法来获取Ruby中的数组中的所有其他条目?奇数或偶数条目值包含在奇数中.我希望能够像这样使用它:
array1 += array2.odd_values
Run Code Online (Sandbox Code Playgroud)
要么
puts array2.odd_values.join("-")
Run Code Online (Sandbox Code Playgroud)
例如
更新
这完全是我所追求的,但我确信有一个较短的版本.
array1.each_with_index do |item,index|
if (index %2 ==0) then
array2.push(item)
end
end
Run Code Online (Sandbox Code Playgroud)
gle*_*man 83
a = ('a'..'z').to_a
a.values_at(* a.each_index.select {|i| i.even?})
# => ["a", "c", "e", "g", "i", "k", "m", "o", "q", "s", "u", "w", "y"]
a.values_at(* a.each_index.select {|i| i.odd?})
# => ["b", "d", "f", "h", "j", "l", "n", "p", "r", "t", "v", "x", "z"]
Run Code Online (Sandbox Code Playgroud)
所以,按要求
class Array
def odd_values
self.values_at(* self.each_index.select {|i| i.odd?})
end
def even_values
self.values_at(* self.each_index.select {|i| i.even?})
end
end
Run Code Online (Sandbox Code Playgroud)
Dam*_*che 69
...
arr = ["0", "1", "2", "3"]
arr.select.each_with_index { |_, i| i.odd? }
arr.select.each_with_index { |_, i| i.even? }
Run Code Online (Sandbox Code Playgroud)
正如floum指出的那样,在Ruby 2.2中你可以简单地做到:
arr.select.with_index { |_, i| i.odd? }
Run Code Online (Sandbox Code Playgroud)
小智 19
你可以使用这个:
(1..6).partition { |v| v.even? } #=> [[2, 4, 6], [1, 3, 5]]
Run Code Online (Sandbox Code Playgroud)
来自Ruby文档:Ruby Docs Reference
Jam*_* EJ 15
left,right = a.partition.each_with_index{ |el, i| i.even? }
Run Code Online (Sandbox Code Playgroud)
使用facet的一些疯狂方式:
require 'facets'
array = [1,2,3,4,5]
odd = array.to_h.keys # 1,3,5
even = array.to_h.values.compact # 2,4
Run Code Online (Sandbox Code Playgroud)
这可能永远不会被阅读,但......
简单干净:
array2.map{ |n| n if n % 2 == 0 }.compact # evens
array2.map{ |n| n if n % 2 == 1 }.compact # odds
Run Code Online (Sandbox Code Playgroud)
刚刚找到一种更简洁的方式(得爱Ruby):
array2.find_all{ |n| n % 2 == 0 } # evens
array2.reject { |n| n % 2 == 0 } # odds
Run Code Online (Sandbox Code Playgroud)
dst = []
array.each_slice(2) { |x| dst.push(x[1]) }
Run Code Online (Sandbox Code Playgroud)
应该给你一个奇数指数的数组.
更换x[1]同x[0]为偶数的条目.
作为记录:
a = [1,2,3,4,5,6]
h = Hash[*a]
evens = h.keys
odds = h.values
Run Code Online (Sandbox Code Playgroud)
我使用数组的“splat”运算符来获取逗号分隔的值,并将其传递给接受参数作为交替键/值的哈希。