[#43494] ブロックとともに呼び出されたsortについて — "Toshiyuki Ogura" <oguradio@...>

小倉です。

12 messages 2007/05/15

[#43508] rubyのテキストについて — 桑江 康公 <ykuwae@...>

はじめまして、桑江といいます。プログラム開発の勉強をはじめたいと考えています。いろいろと調べたのですが、オブジェクト指向を使った開発が現在しりゅうとのことで、Javaを勉強しようと考えていたのですが、rubyという言語もあるということがわかりネットで調べたところこのメーリングリストにたどり着きました。どなたかプログラム開発初心者でもわかりやすい本またはサイトがありましたら教えていただけないでしょうか?ちなみに、私のレベルはHTMLが少しわかる程度です。

8 messages 2007/05/15

[ruby-list:43512] Re: ブロックとともに呼び出されたsortについて

From: rubikitch@...
Date: 2007-05-15 20:39:50 UTC
List: ruby-list #43512
From: "Toshiyuki Ogura" <oguradio@gmail.com>
Subject: [ruby-list:43494] ブロックとともに呼び出されたsortについて
Date: Tue, 15 May 2007 11:29:40 +0900

るびきちです。

> hash = {"x" => 1, "y" => 0, "z" => 2}
> p hash.sort{|a,b|
>    a[1] <=> b[1]
> }

hashを配列に変換し、第1要素(0から数えて)を基準に並べ変えています。
[key, value]の配列なのでhashの値が基準です。

hash = {"x" => 1, "y" => 0, "z" => 2}
# Hashをsortすると配列化される。
hash.sort{|a,b| a[1] <=> b[1]}  # => [["y", 0], ["x", 1], ["z", 2]]
# 配列化したものは順不同になる。
ary = hash.to_a                 # => [["x", 1], ["y", 0], ["z", 2]]
ary.sort{|a,b| a[1] <=> b[1]}   # => [["y", 0], ["x", 1], ["z", 2]]
# sort_byが使える。
ary.sort_by{|x| x[1] }          # => [["y", 0], ["x", 1], ["z", 2]]
hash.sort_by{|x| x[1] }         # => [["y", 0], ["x", 1], ["z", 2]]

sort_byが有用です。ブロックはそれぞれの要素を取ります。
この場合「第1要素」が基準なので x[1] と『1回だけ』書けばいいのです。

--
rubikitch
http://www.rubyist.net/~rubikitch/

In This Thread