Как я могу развернуть строку как “1.. 15,16” в список чисел?

UITableView в рамках UIKit, вы не импортировали это. SO import UIKit.

В вашем viewDidLod:

self.tableView.dataSource = self;
self.tableView.delegate = self;

В своем файле .h вы можете сделать:

@interface YourClassName : UIViewController

И убедитесь, что вы подключили tableView с IBOutlet. #import <UIKit/UIKit.h>

5
задан brian d foy 19 June 2009 в 18:50
поделиться

5 ответов

Если это пользовательский ввод, не используйте в нем строку eval, если у вас вообще есть какие-либо проблемы с безопасностью.

Попробуйте вместо этого использовать Number :: Range :

 use Number::Range;

 $str = "1..15,16" ;
 @arr2 = Number::Range->new( $str )->range;
 print for @arr2;

Чтобы избежать смерти в недопустимом диапазоне, выполните:

 eval { @arr2 = Number::Range->new( $str )->range; 1 } or your_error_handling

Там также Set :: IntSpan , который использует - вместо ..:

 use Set::IntSpan;

 $str = "1-15,16";
 @arr2 = Set::IntSpan->new( $str )->elements;

но для этого требуется, чтобы диапазоны были упорядочены и не перекрывались (он был написан для использования в файлах .newsrc, если кто-нибудь помнит, что это такое). Он также допускает бесконечные диапазоны (где строка начинается - число или заканчивается число -), по которым метод elements будет квакать.

26
ответ дан 18 December 2019 в 06:23
поделиться

Вы думаете о @ arr2 = eval ($ str); Поскольку вы вносите вклад и оцениваете его, вам нужно быть осторожным. Вам, вероятно, следует @ arr2 = eval ($ str) if ($ str = ~ m / ^ [0-9.,] + $ /)

PS Я не знал о пакете Number :: Range , но это круто . Число :: Диапазон ftw.

1
ответ дан 18 December 2019 в 06:23
поделиться
@arr2 = ( eval $str ) ;

Работает, хотя, конечно, вы должны быть очень осторожны с eval ().

0
ответ дан 18 December 2019 в 06:23
поделиться

Вы можете использовать eval:

$str = "1..15,16" ;
@arr2 = ( eval $str ) ;
@arr = ( 1..15,16 ) ;
print "@arr\n" ;
print "@arr2\n" ;

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

-1
ответ дан 18 December 2019 в 06:23
поделиться

Использовать split:

@parts = split(/\,/, $fields);

print $parts[0];
1-6
print $parts[1];
8

Нельзя просто поместить строку, содержащую ',' в массив, и ожидать, что она превратится в элементы (кроме случаев, когда вы используете некую черную магию Perl, но мы не будем здесь вдаваться в подробности)

Но Regex и split - ваши друзья.

-2
ответ дан 18 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

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