17

次のようなルビーの文字列があります。

str = "AABBCCDDEEFFGGHHIIJJ01020304050607080910"
# 20 letters and 20 numbers in this case

これを半分に分割したいのですが、これは次のように行うことができます。

str[0, str.length/2]

また

str.split(0, str.length/2)

その後、文字を使用して配列を作成する必要がありますが、次のように各要素の長さは 2 です。

["AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH", "II", "JJ"],
[01, 02, 03, 04, 05, 06, 07, 08, 09, 10]

問題は、この文字列を変換する簡潔な方法が見つからないことです。私はこのようなことができます

arr = []
while str.length > 0 do
  arr << str[0, 1]
  str[0, 1] = ""
end

しかし、私はむしろのようなものが欲しいですstr.split(2).文字列の長さはいつでも変わる可能性があります.

4

3 に答える 3

30

これはどう?

str.chars.each_slice(2).map(&:join)
于 2012-08-20T14:44:51.137 に答える
20

次のスキャン方法を使用できます。

1.9.3p194 :004 > a = 'AABBCCDDEEC'
 => "AABBCCDDEEC" 
1.9.3p194 :005 > a.scan(/.{1,2}/)
 => ["AA", "BB", "CC", "DD", "EE", "C"] 
于 2012-08-20T14:48:23.973 に答える
0

2.1.0 :642 > "d852".scan(/../) => ["d8", "52"]

于 2016-06-18T15:14:57.763 に答える