首字母化嵌套数组中的第一个单词

时间:2016-04-05 11:44:46

标签: ruby string multidimensional-array

我正在尝试对每个单词的起始字母进行首字母化。这是我的意见:

[["Aniket", 6], ["Shivam", 7], ["Tiwari", 8], ["Abhijeet", 9]]

我需要输出:

DataSet

我如何实现这一目标?

4 个答案:

答案 0 :(得分:4)

你可以试试这个 -

[["aniket", 6], ["shivam", 7], ["tiwari", 8], ["abhijeet", 9]].select {|arr| arr[0].capitalize!}

答案 1 :(得分:4)

你需要遍历外部和内部数组,构造另一个数字大写:

output.map{|e| [e[0].capitalize, e[1]]}

output是你的数组。

答案 2 :(得分:4)

要就地更改数组,我会使用each

arr = [["aniket", 6], ["shivam", 7], ["tiwari", 8], ["abhijeet", 9]]

arr.each { |word, _| word.capitalize! }

arr #=> [["Aniket", 6], ["Shivam", 7], ["Tiwari", 8], ["Abhijeet", 9]]

_是未使用变量的占位符(因为块中未使用第2个元素)。

请注意,capitalize!会更改整个字符串,即"fOO"将变为"Foo"。要更改第一个字符,您可以使用upcase

arr.each { |word, _| word[0] = word[0].upcase }

要返回数组而不是更改现有数组,我会使用map

arr.map { |word, number| [word.sub(/./, &:upcase), number] }

/./是一个匹配单个字符的正则表达式。 sub将第一个匹配(即第一个字符)替换为调用upcase的返回值(即大写字母)。

答案 3 :(得分:2)

另外,您可以在块中传递第一个和第二个数组元素:

output.map {|f, s| [f.capitalize, s] }