2011-08-23 14 views
5

Esto puede ser un tramo realmente largo pero facilitaría la vida si existiera.Ruby array equivalente del registro activo.where (criterios)

Aquí está el escenario en cualquier caso. Tengo un conjunto de hashes con una clave cuyo valor es otro hash ... Sí, lo sé.

Heres una mejor explicación:

@myArrayOfStuff[0] 
@myArrayOfStuff[0]["single-key"] 
@myArrayOfStuff[0]["single-key"]["object-identifier"] 

El primero devuelve un hash. El segundo devolvería un objeto (llamada página en mi caso pero el ejemplo usa nombres diferentes) El tercero devuelve cualquier variable que tenga referencia como identificador de objeto.

Bastante simple.

Lo que me gustaría hacer es elegir hacer otra matriz donde el valor de los identificadores de objeto no sea nulo o sea mayor que x. Algo similar al método activerecord.where.

@x = @myArrayOfStuff.where(["single-key"]["object-identifier"]) > 3orwhatever 

Obviamente esto no funciona ya que la sintaxis es atroz. ¿Pero hay otra forma de hacerlo? Otra ruta para probar podría ser ordenar la matriz por esta variable. Algo así como

@x = @myArrayOfStuff.sort {|x,y| y <=> x } 

Sin embargo, realmente no entiendo qué está pasando con el método de clasificación de Ruby. ¿Alguien puede ayudar?

+0

http://stackoverflow.com/questions/2637419/understanding-ruby-array-sort leyendo esto ahora, pero todavía no está seguro de si se aplica a lo que estoy tratando de hacer – overtone

Respuesta

13

Puede usar el método select.

@x = @my_array_of_stuff.select {|v| v["single-key"]["object-identifier"] > 3} 
+0

Excelente! Entiendo todo lo que hay – overtone

0
collection = [ 
    {a:1, b:2, c:3}, 
    {a:2, b:3, c:4} 
] 
where = {a:1} 
collection.select{|item| 
    where.map{|k,v| 
    item[k] == v ? true : nil 
    }.compact.length == where.length 
} 
+1

Si bien las respuestas de solo código no están prohibidas, comprenda que esta es una comunidad de preguntas y respuestas, en lugar de una fuente de crowdfunding, y que, generalmente, si el OP entendió que el código se publica como respuesta, él/ella habría encontrado una solución similar por sí misma, y ​​no habría publicado una pregunta en primer lugar. El mismo principio se aplica también a los futuros lectores que no estén familiarizados con el código que se presenta. Como tal, proporcione contexto a su respuesta y/o código explicando * cómo * y/o * por qué * funciona. – XenoRo