Bug #7182
closedbug with Array#sort ?
Description
Array.sortにコードブロックを与え、出力した際( p ary.sort do |a,b| .. end )にコードブロックでのソート条件が無視されて出力される
case 1¶
ary = ["1", "2", "10", "11", "3", "4", "23"]
p ary.sort
result: ["1", "10", "11", "2", "23", "3", "4"]¶
#case 2
ary = ["1", "2", "10", "11", "3", "4", "23"]
p ary.sort do |a, b|
a.to_i <=> b.to_i
end
result: ["1", "10", "11", "2", "23", "3", "4"]¶
#case 3
ary = ["1", "2", "10", "11", "3", "4", "23"]
p ary.sort! do |a, b|
a.to_i <=> b.to_i
end
result: ["1", "10", "11", "2", "23", "3", "4"]¶
#case 4
ary = ["1", "2", "10", "11", "3", "4", "23"]
ary.sort! do |a, b|
a.to_i <=> b.to_i
end
p ary
result: ["1", "2", "3", "4", "10", "11", "23"]¶
#case 5
ary = ["1", "2", "10", "11", "3", "4", "23"]
ary2 = ary.sort do |a, b|
a.to_i <=> b.to_i
end
p ary2
result: ["1", "2", "3", "4", "10", "11", "23"]¶
#case 6
ary = ["1", "2", "10", "11", "3", "4", "23"]
p ary.sort do |a, b|
a.to_i <=> b.to_i
end
result: ["1", "10", "11", "2", "23", "3", "4"]¶
Updated by nazomikan (中島 拓哉) about 12 years ago
case 2,3,6は["1", "2", "3", "4", "10", "11", "23"]が期待値だと思うのですがどうでしょう。
Updated by nazomikan (中島 拓哉) about 12 years ago
do..endの優先度が低くてpの引数扱いされてるんですね。
失礼いたしました。 bugではありませんでした。
Updated by no6v (Nobuhiro IMAI) about 12 years ago
case 2,3,6は["1", "2", "3", "4", "10", "11", "23"]が期待値だと思うのですがどうでしょう。
これは、
p(ary.sort) do |a, b|
a.to_i <=> b.to_i
end
と解釈されて、ブロックは p に渡したと解釈されて、無視されています。
() を使うか、ブロックを {} で書くか、一旦別の変数に代入すると、期待する通りに動くと思います。
p(ary.sort do |a, b|
a.to_i <=> b.to_i
end)
p ary.sort{|a, b|
a.to_i <=> b.to_i
}
ary2 = ary.sort do |a, b|
a.to_i <=> b.to_i
end
p ary2
Updated by nazomikan (中島 拓哉) about 12 years ago
ご説明ありがとうございます。
非常に勉強になりました、お騒がせしてしまい申し訳ございません。
Updated by sorah (Sorah Fukumori) about 12 years ago
- Status changed from Open to Rejected