Rubyをベースにプログラミングを学んでいる超初心者です。繰り返し使われている文字の数を出すメソッドを作れ。という課題の解答コードの配列の部分が理解できません。
Ruby
11. def num_repeats(string) 22. counts = [] 33. 44. str_idx = 0 55. while str_idx < string.length 66. letter = string[str_idx] 77. 88. counts_idx = 0 99. while counts_idx < counts.length 10 1110. if counts[counts_idx][0] == letter ・・・・・① 1211. counts[counts_idx][1] += 1 1312. break 1413. end 15 1614. counts_idx += 1 1715. end 1816. 1917. if counts_idx == counts.length 2018. # didn't find this letter in the counts array; count it for the 2119. # first time 2220. counts.push([letter, 1]) 2321. end 2422. 2523. str_idx += 1 2624. end 2725. 2826. num_repeats = 0 2927. counts_idx = 0 3028. while counts_idx < counts.length 31 3229. if counts[counts_idx][1] > 1 3330. num_repeats += 1 3431. end 3532. 3633. counts_idx += 1 3734. end 3835. 3936. return num_repeats 4037. end 41# These are tests to check that your code is working. After writing 42# your solution, they should all print true. 43 44puts('num_repeats("abdbc") == 1: ' + (num_repeats('abdbc') == 1).to_s) 45# one character is repeated 46puts('num_repeats("aaa") == 1: ' + (num_repeats('aaa') == 1).to_s) 47puts('num_repeats("abab") == 2: ' + (num_repeats('abab') == 2).to_s) 48puts('num_repeats("cadac") == 2: ' + (num_repeats('cadac') == 2).to_s) 49puts('num_repeats("abcde") == 0: ' + (num_repeats('abcde') == 0).to_s)
lang
1num_repeats("abdbc") == 1: true 2num_repeats("aaa") == 1: true 3num_repeats("abab") == 2: true 4num_repeats("cadac") == 2: true 5num_repeats("abcde") == 0: true
①に関してなのですが、counts[counts_idx][0]
というのが理解できません。
8.において
counts_idx = 0
としているので、counts[0][0]
になり、意味がよくわかりません。。。そもそもcounts[][]とは、
どういった処理をするのでしょうか?調べてもなかなか出てきません。ご教授お願いします!!
num_repeats("abcba")を例とした僕自身の思考を書いておきます。
lang
1num_repeats("abcba") 2 32.で空の配列オブジェクトcountsをつくる 4 5↓str_idx = 0 で、0 < 5(string.length)なので5.へ。 6 7letter = aになる 8 9↓counts_idx = 0 で、0 = 0(counts.length)なので9.のwhileをとばし、17.のifへ。 10 11空のcountsに[ a , 1 ]([ letter , a ])を入れる 12 13↓str_idx = 1になって、1 < 5(string.lengrh)なので繰り返し5.へ。 14 15letter = bになる 16 17↓counts_idx = 0 で、0 < 2(counts.length)なので9.のwhileへ。 18 1910.でのcounts[counts_idx][0]→counts[0][0]→a[0]・・・?←ーー今ここで止まってます。 20
説明がへたくそで大変申し訳ありません。困っているので助けてください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/14 14:48