Обобщите текст

Если у меня есть text, который я хочу распечатать на странице, но хочу только напечатать, скажем первые 100 слов перед тем, как затмить его... что это самый простой способ сделать это?

3 ответа

Как это для начала:

def first_words(s, n)
 a = s.split(/\s/) # or /[ ]+/ to only split on spaces
 a[0...n].join(' ') + (a.size > n ? '...' : '')
end
s = "The quick brown fox jumps over the lazy dog. " * 20
puts "#{s.size}, #{s.split(/\s/).size}" 
#-> 900, 180
puts first_words(s, 10)
#-> The quick brown fox jumps over the lazy dog. The...
puts first_words("a b c d", 10)
#-> a b c d


У вас есть пара опций, один способ заключается в том, что вы можете сказать, что слово - это n символов, а затем взять подстроку этой длины, добавить ellipsis до конца и отобразить его. Или вы можете запустить хотя бы строку и подсчитать количество пробелов, если вы предположите, что между каждым из слов есть только одно пространство, тогда 100-е пространство будет после 100-го слова, добавьте многоточие, и вы закончите.

Какой из них имеет лучшую производительность, вероятно, будет зависеть от того, как написаны функции, скорее всего, операция подстроки будет быстрее, чем подсчет пробелов. Однако разница в производительности может быть незначительной, поэтому, если вы этого не сделаете, подсчет пробелов, скорее всего, будет самым точным способом.

Кроме того, как ссылка, средняя длина слова на английском языке составляет 5.1 символа.


text.slice(0..100)
if text.size > 100 then puts "..."

http://www.ruby-doc.org/core/classes/String.html

licensed under cc by-sa 3.0 with attribution.