在Ruby中的不同数组的某个位置从单个字符创建数组

时间:2014-11-20 05:38:41

标签: ruby arrays string

myArray = ["1324","11455","2234","55345", "1234", "54321"]

如何将其分成5个数组,每个数组包含该数组中5个字符中的一个?

通缉结果

firstCharacterArray => ["1","1","2","5","1","5"]
...
fifthCharacterArray => ["","5","","5","","1"]

5 个答案:

答案 0 :(得分:2)

你可以这样做:

def extract_n_character(arr, n)
  arr.map { |c| c[n] || '' }
end

extract_n_character(myArray, 0)
# => ["1", "1", "2", "5", "1", "5"]

extract_n_character(myArray, 4)
# => ["", "5", "", "5", "", "1"]

答案 1 :(得分:1)

first_character_array = myArray.map{ |e| e[0] }.map{ |e| e.nil? ? "" : e }
=> ["1", "1", "2", "5", "1", "5"] 
...
fifth_character_array = myArray.map{ |e| e[4] }.map{ |e| e.nil? ? "" : e }
=> ["", "5", "", "5", "", "1"] 

答案 2 :(得分:1)

我尝试以此为出发点:

my_array = ["1324", "11455", "2234", "55345", "1234", "54321"]
max_size = my_array.max_by{ |s| s.size }.size # => 5
arrays = my_array.map{ |s| s.split('') }.map{ |a| 
  (a.size < max_size) ? 
  a += ([''] * (max_size - a.size)) : 
  a 
}

这是arrays的样子:

arrays 
# => [["1", "3", "2", "4", ""],
#     ["1", "1", "4", "5", "5"],
#     ["2", "2", "3", "4", ""],
#     ["5", "5", "3", "4", "5"],
#     ["1", "2", "3", "4", ""],
#     ["5", "4", "3", "2", "1"]]

以下是如何获得所需的数组:

arrays.transpose
# => [["1", "1", "2", "5", "1", "5"],
#     ["3", "1", "2", "5", "2", "4"],
#     ["2", "4", "3", "3", "3", "3"],
#     ["4", "5", "4", "4", "4", "2"],
#     ["", "5", "", "5", "", "1"]]

或者:

arrays.shift.zip(*arrays)
# => [["1", "1", "2", "5", "1", "5"],
#     ["3", "1", "2", "5", "2", "4"],
#     ["2", "4", "3", "3", "3", "3"],
#     ["4", "5", "4", "4", "4", "2"],
#     ["", "5", "", "5", "", "1"]]

这闻起来像家庭作业或教程任务。如果是家庭作业,请考虑教师可以轻松搜索并找到这里给出的答案。

答案 3 :(得分:0)

首先,我使用length获取数组中最长字符串的Enumerable#max_by

然后,我会用String#ljust填充较短的字符串(因此它们都具有相同的长度)并使用String#chars来获取每个字符串的字符数组。

最后,我会transpose这个二维数组的行和列。

array = ["1324","11455","2234","55345", "1234", "54321"]

max = array.max_by(&:length).length
array.map { |s| s.ljust(max).chars }.transpose
#=> [["1", "1", "2", "5", "1", "5"],
#    ["3", "1", "2", "5", "2", "4"],
#    ["2", "4", "3", "3", "3", "3"],
#    ["4", "5", "4", "4", "4", "2"],
#    [" ", "5", " ", "5", " ", "1"]]

答案 4 :(得分:0)

你可以尝试这样的事情。

firstCharacterArray = []
firstCharacterArray = myArray.each{|firstCharacterArray.push(a[0])}