Изменение массивов ассоциаций на клонированных объектах ActiveRecord

Вы можете создать рекурсивную функцию с помощью IndexOf. Передавая строку для поиска и строку, которую нужно найти, каждая рекурсия увеличивает счетчик и устанавливает значение StartIndex равным +1 последнему найденному индексу, пока строка поиска больше не будет найдена. Функция потребует дополнительных параметров. Начальная позиция и счетчик передаются по ссылке:

Function InStrCount(ByVal SourceString As String, _
                    ByVal SearchString As String, _
                    Optional ByRef StartPos As Integer = 0, _
                    Optional ByRef Count As Integer = 0) As Integer
    If SourceString.IndexOf(SearchString, StartPos) > -1 Then
        Count += 1
        InStrCount(SourceString, _
                   SearchString, _
                   SourceString.IndexOf(SearchString, StartPos) + 1, _
                   Count)
    End If
    Return Count
End Function

Функция вызова, передавая строку для поиска и строку для поиска и, необязательно, начальную позицию:

Dim input As String = "Hello there. My name is John. I work very hard. Hello there!"
Dim phrase As String = "hello there"
Dim Occurrences As Integer

Occurrances = InStrCount(input.ToLower, phrase.ToLower)

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

1
задан Craig Walker 30 May 2010 в 16:42
поделиться

1 ответ

u = User.first
u.tickets.size # 12
u2 = u.clone
u2.tickets = u.tickets
u2.tickets.pop
u2.tickets.size # 11    
u.tickets.size  # 12

Итак, u и u2 теперь имеют разные массивы билетов

2
ответ дан 3 September 2019 в 00:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: