Ruby
条件演算子(式が複雑な場合)
「VisualC++2013パーフェクトマスター」で次のコードと出会う。
#include <iostream>
using namespace std;
struct dt1 {
int a;
double b;
};
int main()
{
int a = 1, b;
if (a < 5)
b = 10;
else
b = 50;
b = a<5 ? 10 : 50;
if (a < 10)
b = 1;
else if (a < 100)
b = 2;
else if (a < 500)
b = 3;
else
b = 4;
b = (a < 10) ? 1 : (a < 100) ? 2 : (a < 500) ? 1 : 4;
getchar();
return 0;
}
要するに、赤の部分が条件演算子を使って青の部分のように
1行で書けるということなのだが、
Rubyでも同じようにしてみる。
a = 3
if a < 10
b = 1
elsif a < 100
b = 2
elsif a < 500
b = 3
else
b = 4
end
puts b
a = 33
if a < 10
b = 1
elsif a < 100
b = 2
elsif a < 500
b = 3
else
b = 4
end
puts b
a = 333
if a < 10
b = 1
elsif a < 100
b = 2
elsif a < 500
b = 3
else
b = 4
end
puts b
a = 3333
if a < 10
b = 1
elsif a < 100
b = 2
elsif a < 500
b = 3
else
b = 4
end
puts b
a = 3
puts b = (a < 10)? 1 : (a < 100)? 2 :(a < 500)? 3 : 4
a = 33
puts b = (a < 10)? 1 : (a < 100)? 2 :(a < 500)? 3 : 4
a = 333
puts b = (a < 10)? 1 : (a < 100)? 2 :(a < 500)? 3 : 4
a = 3333
puts b = (a < 10)? 1 : (a < 100)? 2 :(a < 500)? 3 : 4
出力結果
1
2
3
4
1
2
3
4
2014年7月24日木曜日
2014年7月20日日曜日
140720
Ruby
Hashクラスのsortメソッド?
Ruby 1.9では、Hashクラスのsortメソッドは廃止され、
Hashクラスのsortメソッド?
Ruby 1.9では、Hashクラスのsortメソッドは廃止され、
Hashのキーと値をソートした配列を作成して返す。
i_ary = [4, 1, 3, 2]
w_ary = ["GABLES", "ANNE", "GREEN", "OF"]
hash = Hash[i_ary.zip(w_ary)]
p hash
p hash.sort
p hash.sort.map{|i| i[1]}.join(" ")
出力結果
{4=>"GABLES", 1=>"ANNE", 3=>"GREEN", 2=>"OF"}
[[1, "ANNE"], [2, "OF"], [3, "GREEN"], [4, "GABLES"]] ←配列
"ANNE OF GREEN GABLES"
2014年7月13日日曜日
140713(2)
Ruby
Hashのキーや値をまとめて取り出す。
Hashのキーや値をまとめて取り出す。
w = 'a1bxkk3k'
h = w.scan(/[a-z]/).join.chars.group_by(&:to_sym)
p h
p h.keys
p h.map{|f| f.first} ←これでもOK
p h.values
p h.map{|f| f.last} ←これでもOK
出力結果
{:a=>["a"], :b=>["b"], :x=>["x"], :k=>["k", "k", "k"]}
[:a, :b, :x, :k]
[:a, :b, :x, :k]
[["a"], ["b"], ["x"], ["k", "k", "k"]]
[["a"], ["b"], ["x"], ["k", "k", "k"]]
140713
Ruby
each_charメソッドは、charsメソッドと同じだが、今のところ後者の方が好きだ。
each_charメソッドは、charsメソッドと同じだが、今のところ後者の方が好きだ。
w = 'a1bxkk3k'
p w.scan(/[a-z]/).join.chars.group_by(&:to_sym)
p w.scan(/[a-z]/).join.each_char.group_by(&:to_sym)
# 途中で切ると…
p w.scan(/[a-z]/).join.chars
p w.scan(/[a-z]/).join.each_char
出力結果
{:a=>["a"], :b=>["b"], :x=>["x"], :k=>["k", "k", "k"]}
{:a=>["a"], :b=>["b"], :x=>["x"], :k=>["k", "k", "k"]}
["a", "b", "x", "k", "k", "k"]
#<Enumerator: "abxkkk":each_char> ←何か汚い。
登録:
投稿 (Atom)