Tronquer chaîne pour les n premiers mots
Quelle est la meilleure façon de tronquer une chaîne de n premiers mots?
- Êtes-vous à l'aide seulement de Rubis, ou Ruby on Rails?
Vous devez vous connecter pour publier un commentaire.
Quelle est la meilleure façon de tronquer une chaîne de n premiers mots?
Vous devez vous connecter pour publier un commentaire.
str.split(/\s+/, n+1)[0...n].join(' ')
permettra d'améliorer les performances....
gamme littérale, pas la..
un. Trois points exclut la nième valeur.truncate(my_string, :length => 300, :separator => ' ')
300 le nombre de caractères. Vous ne serez pas en mesure de choisir le nombre de mots, mais ce n'est pas si mal!my_string.truncate(300, separator: ' ')
? apidock.com/rails/String/truncateVous pourriez le faire comme ceci:
si vous n'avez pas l'esprit de faire une copie.
Vous pouvez également demander Sawa est Amélioration (wish I was encore un mathématicien, que ce serait un bon nom pour un théorème) par l'ajustement de l'espace de détection:
Si vous avez à traiter avec un
n
qui est plus grand que le nombre de mots danss
vous pouvez utiliser cette variante:trunc = s[/(\s*\S+){#{n}}/]
. Vous n'avez pas besoinstrip
.split
approche) vers le bas comme une réponse, des améliorations et des précisions sur les réponses existantes sont en vaut la peine.s[/(\S+(\s+)?){,#{n}}/].strip
.Cela pourrait être la suite si c'est à partir de rails 4.2 (qui a truncate_words)
Vous pouvez utiliser
str.split.first(n).join(' ')
avec n étant un nombre quelconque.
Les espaces blancs contigus dans la chaîne d'origine sont remplacés par un seul espace blanc dans la chaîne renvoyée.
Par exemple, essayer dans de la cisr:
Cette syntaxe est très clair (comme il ne veut pas utiliser l'expression régulière, tranche de tableau à l'indice). Si vous programme en Ruby, vous savez que la clarté est un important choix stylistiques.
Un raccourci pour
join
est*
Si cette syntaxe
str.split.first(n) * ' '
est équivalent et plus court (plus idiomatiques, moins clair pour les non initiés).Vous pouvez également utiliser
take
au lieu defirst
donc, les éléments suivants devraient faire la même chose