配列
["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
とすればいいように、
["あ", "い", … , "も", "や", "ゆ", "よ", … , "わ", "を", "ん"]
を簡単に作成するにはどのようにすればよろしいでしょうか?
(やはり、全ての文字を使わないと作成できないのでしょうか?)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
あいうえお〜らりるれろわん、のように小文字や濁音を含まないひらがなの配列を求めたい場合は、半角カナの配列から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 14:33
総合スコア241
0
ローマ字で "a" 'i", ... "ka", "ki", ... のように 50 音を生成して、それをローマ字 -> ひらがな変換させてみました。
lang
1# coding: utf-8 2require 'romkan' # gem install romkan 3 4def hiras_ary 5 ans = [] 6 ' kstnhmyrw'.split('').each do |b| 7 'aiueo'.split('').each do |c| 8 ans << "#{b}#{c}".strip.to_kana 9 end 10 end 11 ans << 'nn'.to_kana # ん を追加 12 ans.delete_if {|h| h.length != 1 } # や行 わ行の特別処理" 13end 14 15HIRAS = hiras_ary.freeze 16puts HIRAS.join(' ') 17puts HIRAS.size
実行結果:
あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や ゆ よ ら り る れ ろ わ ゐ ゑ を ん 48
投稿2014/12/05 23:45
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
参考情報:
- ひらがなの配列を使う http://d.hatena.ne.jp/nullpobug/20071009/1191910102
- Ruby の正規表現で日本語(ひらがな/カタカナ/漢字)にマッチさせる http://easyramble.com/japanese-regex-with-ruby-oniguruma.html
実際に試してみました。
lang
1irb(main):001:0> ('あ'..'ん').to_a 2=> ["あ", "ぃ", "い", "ぅ", "う", "ぇ", "え", "ぉ", "お", "か", "が", "き", "ぎ", "く", "ぐ", "け", "げ", "こ", "ご", "さ", "ざ", "し", "じ", "す", "ず", "せ", "ぜ", "そ", "ぞ", "た", "だ", "ち", "ぢ", "っ", "つ", "づ", "て", "で", "と", "ど", "な", "に", "ぬ", "ね", "の", "は", "ば", "ぱ", "ひ", "び", "ぴ", "ふ", "ぶ", "ぷ", "へ", "べ", "ぺ", "ほ", "ぼ", "ぽ", "ま", "み", "む", "め", "も", "ゃ", "や", "ゅ", "ゆ", "ょ", "よ", "ら", "り", "る", "れ", "ろ", "ゎ", "わ", "ゐ", "ゑ", "を", "ん"]
投稿2014/12/05 14:04
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/22 11:30
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/12/05 14:43
2014/12/05 14:54
2014/12/05 15:04