Nano Hash - криптовалюты, майнинг, программирование

Сравните строки в Intersystems Cache Objectscript

Дано:

2 струны StrA, StrB

Я хочу:

Чтобы выполнить сравнение между ними и вернуть ‹0, =0 или >0, в Intersystems Cache ObjectScript.

На данный момент:

Я нашел в документации функцию, которая отвечает моим потребностям СтрКомп. К сожалению, эта функция не является частью Cache ObjectScript, а является частью Caché Basic.

Я обернул функцию как classMethod служебного класса:

ClassMethod StrComp(
    pstrElem1 As %String,
    pstrElem2 As %String) As %Integer [ Language = basic ]
{
    Return StrComp(pstrElem1,pstrElem2)
}

Рекомендуется ли этот подход? доступна ли какая-либо функция?

Заранее спасибо.


Ответы:


1

Немного неясно, что именно вы хотите, чтобы это сравнение строк делало, но похоже, что вы ищете либо оператор follows ], либо sorts after ]].

Документы (взято из здесь ):

  • Двоичный оператор следования (]) проверяет, идут ли символы в левом операнде после символов в правом операнде в последовательности сопоставления ASCII.
  • Двоичный оператор сортировки после (]]) проверяет, сортируется ли левый операнд после правого операнда в последовательности сортировки числового нижнего индекса.

Синтаксис выглядит странно, но он должен делать то, что вам нужно.

if "apple" ] "banana" ...
if "apple" ]] "banana" ...
05.06.2015
  • Да, используя этот оператор, я могу написать функцию, которая сначала сравнивает обе строки и возвращает 0, если они равны. Если они разные, я использую предложенный вами оператор и возвращаю 1 или -1, если strA сортирует после strB 08.06.2015
  • @matmat вы также можете увидеть мое решение, так как оно проходит все строки только один раз; однако его можно улучшить 28.07.2015
  • К сожалению, документация неверна! (На самом деле я реализовал эти операторы, когда работал в InterSystems). 26.12.2016
  • ] будет сравниваться на основе 8-битных символов или 16-битных символов UCS-2 (т. е. символов Unicode, отличных от BMP, т. е. те › 0xffff будут сортироваться на основе их представления в виде пары суррогатных символов). 26.12.2016
  • ]] будет сравнивать на основе текущей настройки последовательности сопоставления. По умолчанию сначала сортируются все числа (и канонические числовые строки) и, наконец, все остальные строки. 26.12.2016

  • 2

    Вы можете использовать это, если вам нужен чистый ObjectScript; предполагается, что вы действительно хотите сделать что-то вроде Java Comparable<String>:

    ///
    /// Compare two strings as per a Comparator<String> in Java
    ///
    /// This method will only do _character_ comparison; and it pretty much
    /// assumes that your Caché installation is Unicode.
    ///
    /// This means that no collation order will be taken into account etc.
    ///
    /// @param o1: first string to compare
    /// @param o2: second string to compare
    /// @returns an integer which is positive, 0 or negative depending on
    /// whether o1 is considered lexicographically greater than, equal or
    /// less than o2
    ClassMethod strcmp(o1 as %String, o2 as %String) as %Integer
    {
        #dim len as %Integer
        #dim len2 as %Integer
        set len = $length(o1)
        set len2 = $length(o2)
        /*
         * Here we rely on the particularity of $ascii to return -1 for any
         * index asked within a string literal which is greater than it length.
         *
         * For instance, $ascii("x", 2) will return -1.
         *
         * Please note that this behavior IS NOT documented!
         */
        if (len2 > len) {
            len = len2
        }
    
        #dim c1 as %Integer
        #dim c2 as %Integer
    
        for index=1:1:len {
            set c1 = $ascii(o1, index)
            set c2 = $ascii(o2, index)
    
            if (c1 '= c2) {
                return c1 - c2
            }
        }
    
        /*
         * The only way we could get here is if both strings have the same
         * number of characters (UTF-16 code units, really) and are of
         * equal length
         */
        return 0
    }
    
    28.07.2015
  • Это более ОО-решение! Я искал решение, предоставленное @BrandonHorst, но этот ответ отличный, спасибо @fge! ;) 30.07.2015

  • 3

    Можно использовать разные языки в своем коде, если это решает вашу задачу, то почему бы и нет. Но вы должны заметить, что не все языки работают на стороне сервера. JavaScript по-прежнему является клиентским языком и не может использоваться таким образом.

    05.06.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..