Pregunta

Quiero llamar a un método C# de un script de Ironruby que resulta en un hash rubí. Probé el diccionario, pero eso se queda como está.

public Dictionary<string, string> GetHash()
{
    Dictionary<string, string> hash = new Dictionary<string, string>();
    hash.Add("a", "1");
    hash.Add("b", "2");
    return hash;
}

Me gustaría poder usarlo en mi guión de Ironruby como un hash

myHash = scopeObj.GetHash()
myHash.each{ |k,v|
    print("#{k}=#{v}")
}

Cuyos resultados son:

 [a, 1]=
 [b, 2]=
¿Fue útil?

Solución

No funciona así, ya que los elementos en un diccionario .NET son instancias de KeyValuePair.

Puede solucionar eso con bastante facilidad, con una sola línea de código de conversión:

d = scopeObj.get_hash
h = Hash[*d.collect { |x| [x.key,x.value] }.flatten]
h.each { |k,v| puts k,v }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top