2016-04-05 3 views
-1

Я пытаюсь выполнить капитализацию стартовой буквы каждого слова. Это мой вклад:Capitialize первая буква слов во вложенном массиве

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

мне нужен выход:

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

Как я могу добиться этого?

+0

'.titleize' на строке выполнит вашу работу. –

+0

титул не работает –

+0

Что вы думаете? – sawa

ответ

4

Вы можете попробовать this-

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

спасибо, что вы сейчас работаете –

+0

@aniket рад, что это сработало для вас! :) – dp7

+2

Индивидуальный вкус может быть, но 'select' работает только здесь, потому что' capize! 'Перенастраивает правдивое значение,' map' является более описательным. Он также не требует мутации исходного значения, но возвращает новую. Если вы хотите мутировать, то, возможно, используйте 'each'. – Kris

4

Вам нужно перебирать внешний и внутренний массив, строительство еще один со словами капитализируются:

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

output ваш массив.

2

Для того, вы можете пройти первый и второй элементы массива в блоке:

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

'[[" aB ", 8]]. Map {| f, s | [f.capitalize, s]} # => ["Ab", 8] '. –

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]] 

_ является заполнителем для неиспользуемая переменная (потому что второй элемент не используется в блоке).

Обратите внимание, что capitalize! изменит всю строку, то есть "fOO" станет "Foo". Для того, чтобы просто изменить первый символ, вы могли бы использовать upcase:

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

Чтобы вернуть новый массив вместо изменения существующего, я бы использовал map:

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

/./ является регулярным выражение, которое соответствует одному символу. sub заменяет первое совпадение (т. Е. Первый символ) с возвращаемым значением вызова upcase (то есть буквой с верхним регистром).

+0

Что делать, если первым элементом является «aB» или «Ab»? –

+0

@CarySwoveland "capitialize first letter" неоднозначно. ОП должен уточнить, что он хочет. – Stefan

+0

Возможно, вы должны указать свое предположение, предположительно, что все буквы имеют строчные буквы. –

Смежные вопросы