Netlogo: Есть ли способ сравнить строки, нечувствительные к капитализации? - PullRequest
0 голосов
/ 12 октября 2018

Я не смог найти способ сравнить две строки без учета регистра.Как я мог сделать это в netlogo?

1 Ответ

0 голосов
/ 12 октября 2018

Я не смог найти специально созданный примитив для этого или даже to-upper примитив, который сделал бы его относительно простым.Вы можете сделать грубую служебную процедуру, чтобы сделать это:

to-report equal-ignore-case? [ str1 str2 ]

  if (length str1 != length str2) [ report false ]

  foreach (range length str1) [ i -> 
    let c1 (item i str1)
    let c2 (item i str2)
    ; if c1 = c2, no need to do the `to-upper-char` stuff
    if (c1 != c2 and to-upper-char c1 != to-upper-char c2) [
      report false 
    ]
  ]
  report true
end

; this only works with a string length 1
to-report to-upper-char [ c ]
  let lower "abcdefghijklmnopqrstuvwxyz"
  let upper "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

  let pos (position c lower)
  report ifelse-value (is-number? pos) [ item pos upper ] [ c ]  
end

Тогда просто equal-ignore-case? "hello" "HELLO" для сравнения.

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

...