|
setup diary |
R | julia | ruby | python3 | |
定義 | h<-c("a"=1,"b"=2) | h=Dict("a"=>1,"b"=>2) | h={"a"=>1,"b"=>2} | h={"a":1,"b":2} |
内包表記 | d<-sapply(as.character(1:5),function(x)as.numeric(x)^2) | d=Dict((string(k),k^2) for k=1:5) | d=(1..5).to_h{|i|[i.to_s,i**2]} | d={str(k):k**2 for k in range(1,6)} |
テキスト | x<-scan(text="H 1\nHe 4", what=list("",1)) names(x[[2]])<-x[[1]] x<-x[[2]] | x=Dict(split(i) for i in split("H 1\nHe 4","\n")) | x=Hash[*"H 1\nHe 4".split] | x=dict(i.split() for i in "H 1\nHe 4".split("\n")) |
アクセス | h["a"] | h["a"] | h["a"] | h["a"] |
追加 | h["c"]<-3 | h["c"]=3 | h["c"]=3 | h["c"]=3 |
キー | names(h) | keys(h) | h.keys | h.keys() |
値 | h | values(h) | h.values | h.values() |
キーの存在 | "a"%in%names(h) | haskey(h,"a") | h.key?("a") | "a" in h |
値の存在 | 1%in%h | 1∈values(h) | h.value?(1) | 1 in h.values() |
長さ | length(h) | length(h) | h.length h.size | len(h) |
結合 | d<-c(x,h) | d=merge(h,x) | d=h.merge(x) | d={**h,**x} |
上書き結合 | h<-c(x,h) | merge!(h,x) | h.merge!(x) | h.update(x) |
x<-read.table(text="H 1\nHe 4",row.names=1) x["H",]とすると,一列目を名前として取り込むことができ,これを用いて値を取り出すことができるが,上で示した方法では必要なかったカンマをつける必要がある.使いやすさとしては,テキストから辞書への変換はrubyが楽で, pythonでは結合が少しやりにくいので,ruby, julia, python, Rの順かな.ネタが尽きてきたので,シリーズになっていた今回の言語比較ももうそろそろ終わりになりそうです.perlを加えて比較すべきだったかも知れませんが,perlの文法はかなり忘れてしまったし,perlを書く機会もあまり無いだろうから,まあ良いかな.