質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • Ruby

    7371questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • FileMaker

    21questions

    FileMaker(ファイルメーカー)は、ファイルメーカー社が開発しているデータベース構築ソフトウェアです。

フォルダー名の読み込み順番について

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 329

miyazawa_shi

score 4

概要

Rubyでフォルダー名を読み込む順番の規則性がわかりません。
実行環境と読み込むフォルダー名、Rubyのコードは以下です。

実行環境
OS : macOS High Sierra v10.13.2
Ruby : 2.4.1

フォルダー名 (19個のフォルダー)

・Y2013_07 ・Y2013_10 ・Y2014_01 ・Y2014_04 ・Y2014_07 ・Y2014_10 ・Y2015_11
・Y2013_08 ・Y2013_11 ・Y2014_02 ・Y2014_05 ・Y2014_08 ・Y2014_11
・Y2013_09 ・Y2013_12 ・Y2014_03 ・Y2014_06 ・Y2014_09 ・Y2014_12

実行コード

以下のコードを実行しています。
最初に読み込まれるのが「Y2014_09」となっており、理想として「Y2013_07」を一番最初に読み込みたいです。

p Dir.glob(*)
# => ["Y2014_09", "Y2014_07", "Y2013_10", "Y2013_11", "Y2014_06", "Y2014_01", "Y2014_08", "Y2014_12", "Y2014_04", "Y2014_03", "Y2014_02", "Y2014_05", "Y2013_12", "Y2014_11", "Y2013_08", "Y2013_09", "Y2014_10", "Y2013_07", "Y2015_11"]
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

lsコマンドなどでファイルの一覧を表示するとソートされているのでそれが当たり前のように感じますが、大抵の言語の低水準I/Oライブラリーでは「ファイルがどの順番に取得できるかの保証はない」ように思います。それはOSのシステムコールがそもそも順番を保証していない物理エントリー順で返す(※)からだと思います。ソートの順番はアプリケーションによって様々なので逆に下手にソートされてしまうと速度が遅くなるだけであまり益がないという考え方ではないでしょうか。

※訂正:「保証しない」=>「物理エントリー順」に訂正させていただきました。
ご指摘ありがとうございました。>otnさん

ちなみにlsはシステムコールで返されたファイル名を自前でソートしているだけだと思います。

Rubyには暗いので実際にそのような便利なソート機能が何かのオプションにあるのかどうか自分は知らないのですが、例えばよく用いられるであろうdir.globなどは順番の保証がないといった記事を見かけました。
https://docs.ruby-lang.org/ja/latest/class/Dir.htmlを見てみたのですが順番について何も書いてないように見えました・・・)

ソートそのものは面倒という程でもないでしょうから、全ての一覧を取得した後にソートしてはいかがでしょうか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/21 20:02

    ls -f で実際に取得した順番で表示されます。

    キャンセル

  • 2017/12/21 20:18

    なるほどmanにそう書いてありますね!意識したことがなかったです。
    コメントありがとうございました。

    キャンセル

  • 2017/12/22 00:39

    回答者の方はご存じの上でぼやかしたと思いますが、順番の保証が無いのじゃなくて、物理エントリ順ですね。物理エントリ順であることは保証されていると思います。

    キャンセル

  • 2017/12/22 00:59

    otnさん、コメントありがとうございます。
    はっきり分かっていてコメントしたわけではありませんが、やはりそうなのですね。
    利用者側からするとファイルを生成したり削除したあとで物理エントリー順がどうなるかを意識することは普通ないであろうという考えから、「保証がない」という表現でも実際上は問題ないと思っていましたが、ここは「保証がない」ではなく「物理エントリー順」と言うべきですね!

    キャンセル

0

ディレクトリエントリから取得されるファイルの順番は不定です。必要ならソートして下さい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby

    7371questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • FileMaker

    21questions

    FileMaker(ファイルメーカー)は、ファイルメーカー社が開発しているデータベース構築ソフトウェアです。