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

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

ただいまの
回答率

87.94%

あ〜ん の配列を簡単に作成するには?

解決済

回答 3

投稿

  • 評価
  • クリップ 3
  • VIEW 6,256

score 269

配列
["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p",
 "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
を簡単に作成するには、
('a'..'z').to_a
とすればいいように、
["あ", "い", … , "も", "や", "ゆ", "よ", … , "わ", "を", "ん"]
を簡単に作成するにはどのようにすればよろしいでしょうか?
(やはり、全ての文字を使わないと作成できないのでしょうか?)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

checkベストアンサー

+4

あいうえお〜らりるれろわん、のように小文字や濁音を含まないひらがなの配列を求めたい場合は、半角カナの配列からNKFで変換すればよいと思います。
chr1 = NKF.nkf("-Xw", chr) で半角カナから全角カタカナに、 NKF.nkf("-h1w", chr1) で全角カタカナから全角ひらがなに変換しています。

require 'nkf'
p ("ア".."ン").to_a.map{ |chr| NKF.nkf("-h1w", NKF.nkf("-Xw", chr)) } 
# => ["あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ", "さ", "し", "す", "せ", "そ", "た", "ち", "つ", "て", "と", "な", "に", "ぬ", "ね", "の", "は", "ひ", "ふ", "へ", "ほ", "ま", "み", "む", "め", "も", "や", "ゆ", "よ", "ら", "り", "る", "れ", "ろ", "わ", "ん"]

("ア".."ン").to_a の代わりに [*"ア".."ン"] でも良いでしょう。

require 'nkf'
p [*"ア".."ン"].map{ |chr| NKF.nkf("-h1w", NKF.nkf("-Xw", chr)) }
# => ["あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ", "さ", "し", "す", "せ", "そ", "た", "ち", "つ", "て", "と", "な", "に", "ぬ", "ね", "の", "は", "ひ", "ふ", "へ", "ほ", "ま", "み", "む", "め", "も", "や", "ゆ", "よ", "ら", "り", "る", "れ", "ろ", "わ", "ん"]

(以下追記)
ただし、残念ながら「を」が含まれません。なぜかというと半角カナを文字コード順で並べた場合、「ヲ」の位置は「ア」のずっと前に位置するからです。

p [*"ヲ".."ン"]
# => ["ヲ", "ァ", "ィ", "ゥ", "ェ", "ォ", "ャ", "ュ", "ョ", "ッ", "ー", "ア", "イ", "ウ", "エ", "オ", "カ", "キ", "ク", "ケ", "コ", "サ", "シ", "ス", "セ", "ソ", "タ", "チ", "ツ", "テ", "ト", "ナ", "ニ", "ヌ", "ネ", "ノ", "ハ", "ヒ", "フ", "ヘ", "ホ", "マ", "ミ", "ム", "メ", "モ", "ヤ", "ユ", "ヨ", "ラ", "リ", "ル", "レ", "ロ", "ワ", "ン"]

なので「を」だけは追加してください。
例えば、後ろから2番目に挿入するならば array.insert(-2, "を") とすれば良いでしょう。
参考:instance method Array#insert

require 'nkf'
p [*"ア".."ン"].map{ |chr| NKF.nkf("-h1w", NKF.nkf("-Xw", chr)) }.insert(-2, "を")
# => ["あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ", "さ", "し", "す", "せ", "そ", "た", "ち", "つ", "て", "と", "な", "に", "ぬ", "ね", "の", "は", "ひ", "ふ", "へ", "ほ", "ま", "み", "む", "め", "も", "や", "ゆ", "よ", "ら", "り", "る", "れ", "ろ", "わ", "を", "ん"]
また「ゐ」「ゑ」の半角カナは存在しませんので、このやり方では出せません。これも希望の位置に追加してください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2014/12/05 23:43

    "ゐ", "ゑ", "を" がどうして消えたか教えていただけないでしょうか?

    キャンセル

  • 2014/12/05 23:54

    "ゐ", "ゑ" は半角カナに含まれていないから出力されなかったのですね。
    分かりやすい説明ありがとうございます。

    キャンセル

  • 2014/12/06 00:04

    コメントされている間に編集してしまい、申し訳ありませんでした。これで最終版にします。

    キャンセル

+3

ローマ字で "a" 'i", ... "ka", "ki", ... のように 50 音を生成して、それをローマ字 -> ひらがな変換させてみました。

# coding: utf-8
require 'romkan'   # gem install romkan

def hiras_ary
  ans = []
  ' kstnhmyrw'.split('').each do |b|
    'aiueo'.split('').each do |c|
      ans << "#{b}#{c}".strip.to_kana
    end
  end
  ans << 'nn'.to_kana  # ん を追加
  ans.delete_if {|h| h.length != 1 } # や行 わ行の特別処理"
end

HIRAS = hiras_ary.freeze
puts HIRAS.join(' ')
puts HIRAS.size
実行結果:
あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や ゆ よ ら り る れ ろ わ ゐ ゑ を ん
48

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+2

参考情報:
- ひらがなの配列を使う http://d.hatena.ne.jp/nullpobug/20071009/1191910102
- Ruby の正規表現で日本語(ひらがな/カタカナ/漢字)にマッチさせる http://easyramble.com/japanese-regex-with-ruby-oniguruma.html

実際に試してみました。
irb(main):001:0> ('あ'..'ん').to_a
=> ["あ", "ぃ", "い", "ぅ", "う", "ぇ", "え", "ぉ", "お", "か", "が", "き", "ぎ", "く", "ぐ", "け", "げ", "こ", "ご", "さ", "ざ", "し", "じ", "す", "ず", "せ", "ぜ", "そ", "ぞ", "た", "だ", "ち", "ぢ", "っ", "つ", "づ", "て", "で", "と", "ど", "な", "に", "ぬ", "ね", "の", "は", "ば", "ぱ", "ひ", "び", "ぴ", "ふ", "ぶ", "ぷ", "へ", "べ", "ぺ", "ほ", "ぼ", "ぽ", "ま", "み", "む", "め", "も", "ゃ", "や", "ゅ", "ゆ", "ょ", "よ", "ら", "り", "る", "れ", "ろ", "ゎ", "わ", "ゐ", "ゑ", "を", "ん"]

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2014/12/05 23:10

    小文字や濁音等を省いた形で出力は可能でしょうか?

    キャンセル

  • 2019/09/22 20:30

    「あ」から「お」まででしたら、
    ```:ruby
    text=[*"あ".."お"]
    puts text.join
    puts text.each_slice(2).map(&:first).join
    #=>あぃいぅうぇえぉお
    #=>あいうえお
    ```

    こういうのはどうでしょうか?

    参考
    Ruby | 配列の奇数番目と偶数番目を取り出す方法 - Qiita
    https://qiita.com/ddgg7755/items/ed7db4b342b783620b41
    >"ary = [1,2,3,4,5,6,7,8,9,10]
    odd = ary.each_slice(2).map(&:first)
    even = ary.each_slice(2).map(&:last)

    p odd #=>[1,3,5,7,9]
    p even #=>[2,4,6,8,10]
    "

    Ruby - 配列を1つ飛ばしずつで参照したい|teratail
    https://teratail.com/questions/148277

    > "array = [1, 2, 3, 4, 5]
    p array.each_slice(2).map(&:first) # => [1, 3, 5]"

    キャンセル

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

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

関連した質問

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