Есть ли какая-либо функция в ruby, которая сравнивает две строки и возвращает количество символов, которые у них есть общего?Функция, которая возвращает количество общих символов в рельсах
ответ
Сдача в аренду:
s1 = "abacad"
s2 = "bagfa"
Вы можете написать:
(s1.chars & s2.chars).size
#=> 2
Если вы хотите сосчитать дубликаты:
s1.chars.uniq.reduce(0) { |cnt,c| cnt + [s1.count(c), s2.count(c)].min }
#=> 3
edit1: После прочтения @ комментарий ChrisHeald, я вижу OP добавила дополнительное требование в комментарий: соответствие ch атракторы занимают одинаковые позиции. В этом случае еще проще:
s1.chars.zip(s2[0,[s1.size, s2.size].min].chars).count { |c1,c2| c1==c2 }
#=> 1
я был вынужден изменить то, что я изначально имел, как и @ChrisHeald указал на проблему. К сожалению, исправление принесло с собой уклонение (а также временную строку и еще один временный массив).
Мы
a = s1.chars.zip(s2.chars)
#=> [["a", "b"], ["b", "a"], ["a", "g"], ["c", "f"], ["a", "a"], ["d", nil]]
a.count { |c1,c2| c1==c2 }
#=> 1
Edit2:
Чтобы избежать создания промежуточных массивов:
[s1.size, s2.size].min.times.count { |i| s1[i] == s2[i] }
#=> 1
Это вернет все общие символы, а не все обычные символы в том же положении. 's1 =" ab "; s2 = "ba" 'дает вам * m * of 2, когда оно должно быть 0. –
@ Крис, я собирался ответить на вопрос, не заметив дополнительной информации в комментарии OP. (Не люди замечают кнопку «изменить»?) Я могу что-то добавить. –
Упрощенный для действительного решения, но я хочу указать, что это создаст n + 1 промежуточных массивов (где n - длина строки) и не будет работать, если строки имеют несоответствующие размеры; для обработки строк это, вероятно, нежелательные черты. –
Существует не один, но это тривиально, чтобы написать одно:
def matching_chars(str1, str2)
chars, index = str2.chars, -1
str1.chars.count {|c| chars[index += 1] == c }
end
Просто перебирать один символов струны и подсчитать количество раз, что он соответствует символу в позиции другой струны.
- 1. функция, которая возвращает количество гласных в строке
- 2. Функция python, которая возвращает переменное количество выходов
- 3. Функция, которая определяет частоту символов
- 4. php-функция, которая подсчитывает количество похожих символов в строке
- 5. Функция, которая возвращает многомерный массив
- 6. Функция Haskell, которая возвращает произвольное количество полей в виде списка
- 7. Функция, которая возвращает количество его вызовов в JavaScript
- 8. Функция, которая возвращает функцию
- 9. Функция, которая возвращает видимость
- 10. Функция, которая возвращает несколько столбцов
- 11. Функция, которая возвращает DataTable
- 12. Функция, которая возвращает QList
- 13. Функция, которая возвращает namedtuple
- 14. Есть функция, которая возвращает корневую букву для специальных символов?
- 15. Есть функция, которая возвращает количество различий между двумя строками?
- 16. Pthread ~ Функция, которая возвращает символ в pthread.
- 17. Функция двусторонней кодировки, которая возвращает короткие хэши
- 18. Количество символов в строке из списка символов
- 19. Количество символов в указателе
- 20. Функция, которая возвращает список кортежей.
- 21. C++: Функция, которая возвращает перечисление
- 22. Функция, которая возвращает несколько значений
- 23. Функция Dllimport, которая возвращает struct
- 24. функция OCaml, которая возвращает модуль
- 25. Функция, которая возвращает измененные данные
- 26. функция, которая возвращает таблицу SQL
- 27. функция JS, которая возвращает десятичный формат 1
- 28. функция Matlab, которая возвращает градиент
- 29. Функция Лиспа, которая возвращает сумму
- 30. Python- Функция, которая возвращает значение
Я не знаю такого встроенного метода, но вы можете написать один если вы определите свое проблемное пространство немного лучше. Можете привести несколько примеров? И я полагаю, что это не домашнее задание? :) –
Это не домашнее задание :) Я хочу реализовать алгоритм jaro-winkler, и первым шагом будет вычисление m, где m - количество совпадающих символов в тех же позициях (я забыл упомянуть об этом в моем вопросе). Например, для «CRATE» a «TRACE» m равно 3 (они имеют R, A, E в общих положениях: 1, 2 и 3). Но я полагаю, что я сделаю это самостоятельно – Madalina
Если это так, то это XY-проблема. – sawa