Оператор == всегда предназначен для сравнения ссылок на объекты, тогда как метод сравнения строк .equals () переопределяется для сравнения содержимого:
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // It prints false (reference comparison)
System.out.println(s1.equals(s2)); // It prints true (content comparison)
Если я правильно понимаю, и представление ваших примерных данных является точным, то вам не нужно обрабатывать ([split]
) данные, хранящиеся в results
, но оставить это анализатору списка Tcl. Другими словами, входные данные уже являются допустимым строковым представлением списка Tcl, подходящего для дальнейшей обработки. Смотрите:
set results {
{0 0 0 0 1}
{2 2 3 3 3}
{1 1 2 3 4}
};
set thresholds {
3
2
1
}
lmap values $results threshold $thresholds {
lmap v $values {expr {$v >= $threshold}}
}
Это даст:
{0 0 0 0 0} {1 1 1 1 1} {1 1 1 1 1}
Фон: когда $results
обрабатывается [lmap]
, он автоматически превращается в список.
Я думаю, что лучше разделить в соответствии с символом новой строки, а затем применить регулярное выражение для получения данных. Я попробовал пример кода.
set results "{0 0 0 0 1}
{2 2 3 3 3}
{1 1 2 3 4}";
set result [split $results \n];
foreach line $result {
if {[regexp {^\s*\{(.+)\}\s*} $line Complete_Match Content]} {
puts "$Content\n";
}
}