Forum: Ruby-dev [ruby-trunk - Bug #7182][Open] bug with Array#sort ?

Posted by "nazomikan (中島 拓哉)" <nazomikan@gmail.com> (Guest)
on 2012-10-18 13:36
(Received via mailing list)
Issue #7182 has been reported by nazomikan (中島 拓哉).

----------------------------------------
Bug #7182: bug with Array#sort ?
https://bugs.ruby-lang.org/issues/7182

Author: nazomikan (中島 拓哉)
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.2
ruby -v: 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]


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"]
Posted by "nazomikan (中島 拓哉)" <nazomikan@gmail.com> (Guest)
on 2012-10-18 13:40
(Received via mailing list)
Issue #7182 has been updated by nazomikan (中島 拓哉).


case 2,3,6は["1", "2", "3", "4", "10", "11", "23"]が期待値だと思うのですがどうでしょう。
----------------------------------------
Bug #7182: bug with Array#sort ?
https://bugs.ruby-lang.org/issues/7182#change-31006

Author: nazomikan (中島 拓哉)
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.2
ruby -v: 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]


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"]
Posted by "nazomikan (中島 拓哉)" <nazomikan@gmail.com> (Guest)
on 2012-10-18 14:35
(Received via mailing list)
Issue #7182 has been updated by nazomikan (中島 拓哉).


do..endの優先度が低くてpの引数扱いされてるんですね。
失礼いたしました。 bugではありませんでした。

----------------------------------------
Bug #7182: bug with Array#sort ?
https://bugs.ruby-lang.org/issues/7182#change-31010

Author: nazomikan (中島 拓哉)
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.2
ruby -v: 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]


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"]
Posted by no6v (Nobuhiro IMAI) (Guest)
on 2012-10-18 14:39
(Received via mailing list)
Issue #7182 has been updated by no6v (Nobuhiro IMAI).


> 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

----------------------------------------
Bug #7182: bug with Array#sort ?
https://bugs.ruby-lang.org/issues/7182#change-31011

Author: nazomikan (中島 拓哉)
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.2
ruby -v: 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]


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"]
Posted by "nazomikan (中島 拓哉)" <nazomikan@gmail.com> (Guest)
on 2012-10-18 14:54
(Received via mailing list)
Issue #7182 has been updated by nazomikan (中島 拓哉).


ご説明ありがとうございます。
非常に勉強になりました、お騒がせしてしまい申し訳ございません。

----------------------------------------
Bug #7182: bug with Array#sort ?
https://bugs.ruby-lang.org/issues/7182#change-31012

Author: nazomikan (中島 拓哉)
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.2
ruby -v: 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]


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"]
Posted by sorah (Shota Fukumori) (Guest)
on 2012-10-18 14:56
(Received via mailing list)
Issue #7182 has been updated by sorah (Shota Fukumori).

Status changed from Open to Rejected


----------------------------------------
Bug #7182: bug with Array#sort ?
https://bugs.ruby-lang.org/issues/7182#change-31013

Author: nazomikan (中島 拓哉)
Status: Rejected
Priority: Normal
Assignee:
Category: core
Target version: 1.9.2
ruby -v: 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]


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"]
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.