我有一个问题。 我想我只是累了,因为我的大脑不想再思考了。 无论如何。 我有多个字符串,我从电子表格收集,每个字符串具有相同的布局,我正在搜索字符串中的特定部分。这是很容易的部分。所以字符串看起来像这样。
this is a string from Japan
this is a string from China
this is a string from America
this is a string from China
this is a string from England
this is a string from Japan
这些字符串不是本地字符串,但是我从excel表中收集它,所以我随后调用找到最后的每个字符串的位置,在这种情况下,我将采用这样的变量。
use Spreadsheet::Read;
my $book = ReadData ("INPUT.xlsx");
my @rows = Spreadsheet::Read::rows ($book->[1]);
my $count;
$count = 0;
my @clause_all;
foreach my $tab(@rows) {
$count ++;
my @row = Spreadsheet::Read::cellrow ($book->[1], $count);
print $row[5]; # $row[5] would be the location like "japan, china, america etc.
}
这是我正在努力的部分,循环看到$ row [5]作为单个术语,我现在需要删除重复并需要以某种方式连接每一行的$ row [5]以获得一个数组然后抛弃重复。我尝试这样做,但由于每个$ row [5]
的单数形式,它不起作用 my %special = ();
foreach (@my_array)
{
$special{$_} = 1;
}
my @deduped = keys %special;
print "@deduped\n";
但是,如果我创建我自己的测试数组,它可以工作,除了它将它们从原始顺序中抛出,无论如何,所以它必须是获取存储在数组中的位置$ row [5]的问题。
@my_test_array = ("Japan", "China", "America", "China", "England", "Japan")
my %special = ();
foreach (@my_test_array)
{
$special{$_} = 1;
}
my @deduped = keys %special;
print "@deduped\n";
提前致谢!
编辑!
嗯,这确实有效,但不确定这有多整洁。 :)
use Spreadsheet::Read;
my $book = ReadData ("NSA_DB.xlsx");
my @rows = Spreadsheet::Read::rows ($book->[1]);
my $count;
$count = 0;
my @clause_all;
foreach my $tab(@rows) {
$count ++;
my @row = Spreadsheet::Read::cellrow ($book->[1], $count);
push @array, "$row[3]\n";
}
my %special = ();
foreach (@array)
{
$special{$_} = 1;
}
my @deduped = keys %special;
print "@deduped";
再次感谢。
答案 0 :(得分:0)
问题不是很清楚,但如果您只想为数组添加唯一值,以便这些值出现在源电子表格中:
my %added;
my @array;
for (whatever) {
push @array, $_ unless exists $added{$_};
$added{$_} = 1;
}
根据原始问题的更新:
use Spreadsheet::Read;
my $book = ReadData ("NSA_DB.xlsx");
my @rows = Spreadsheet::Read::rows ($book->[1]);
my @array;
my %added;
for (my $count = 1; $count <= @rows; $count++) {
my @row = Spreadsheet::Read::cellrow ($book->[1], $count);
push @array, $row[3] unless $added{$row[3]};
$added{$row[3]} = 1;
}
print join("\n", @array), "\n";