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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

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

Q&A

解決済

3回答

8148閲覧

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

manman

総合スコア233

Ruby

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

1グッド

3クリップ

投稿2014/12/05 14:37

配列
["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
とすればいいように、
["あ", "い", … , "も", "や", "ゆ", "よ", … , "わ", "を", "ん"]
を簡単に作成するにはどのようにすればよろしいでしょうか?
(やはり、全ての文字を使わないと作成できないのでしょうか?)

DrqYuto👍を押しています

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

riocampos

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

manman

2014/12/05 14:43

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

2014/12/05 14:54

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

2014/12/05 15:04

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

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

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

参考情報:

実際に試してみました。

lang

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

投稿2014/12/05 14:04

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

manman

2014/12/05 14:10

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

2019/09/22 11: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]"
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問