Quale oggetto .NET corrisponde a un hash ironruby
Domanda
Voglio chiamare un metodo C# da uno script ironuby che si traduce in un hash di Ruby. Ho provato il dizionario ma questo rimane così com'è.
public Dictionary<string, string> GetHash()
{
Dictionary<string, string> hash = new Dictionary<string, string>();
hash.Add("a", "1");
hash.Add("b", "2");
return hash;
}
Vorrei poterlo usare nella mia sceneggiatura ironuby come hash
myHash = scopeObj.GetHash()
myHash.each{ |k,v|
print("#{k}=#{v}")
}
I risultati di cui sono:
[a, 1]=
[b, 2]=
Soluzione
Non funziona così poiché gli articoli in un dizionario .NET sono istanze keyvaluepair.
Puoi alternativa così facilmente, con una singola riga di codice di conversione:
d = scopeObj.get_hash
h = Hash[*d.collect { |x| [x.key,x.value] }.flatten]
h.each { |k,v| puts k,v }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow