-3

含む文字列配列@file_pathsがあるとします

@file_paths= ["C:\Lazy\FolderA\test.cpp", "C:\Lazy\FolderA\test2.cpp", 
              "C:\Lazy\FolderB\test.cpp", "C:\Lazy\FolderB\test2.cpp", ... etc]

FolderA の位置、FolderB、位置などに対応する配列インデックスを見つけられるようにしたいと考えています。

つまり、次のようなもの@file_paths.indices("FolderA")が返さ@indices = [0,1] れ、@file_paths.indices("FolderB")返される@indices = [2,3]..など

トリックは、対応するインデックスを取得するために @file_paths で contains 関数を実行することです。サブルーチンはどのようになりますか?

4

2 に答える 2

2

ここに答えがあります:http://bit.ly/13LE8K0

CPAN List::MoreUtilsを使用できます

use 5.012;
use strict;
use warnings;
use List::MoreUtils qw(indexes);

my @file_paths= qw(
        C:\Lazy\FolderA\test.cpp C:\Lazy\FolderA\test2.cpp
        C:\Lazy\FolderB\test.cpp C:\Lazy\FolderB\test2.cpp
);

my @ind = indexes {$_ =~ /FolderB/} @file_paths;
say "@ind";

言う

2 3
于 2013-05-11T00:47:09.867 に答える
0
my @file_paths= ("C:\\Lazy\\FolderA\\test.cpp", "C:\\Lazy\\FolderA\\test2.cpp", 
              "C:\\Lazy\\FolderB\\test.cpp", "C:\\Lazy\\FolderB\\test2.cpp");

my @aIndices = indices("FolderA", @file_paths);


sub indices {
  my ($keyword, @paths) = @_;
  my @results = ();

  for ( my $i = 0; $i < @paths; ++$i )
  {
    if ($paths[$i] =~ /\\$keyword\\/)
    {
      push @results, $i;
    }
  }

  return @results;
}
于 2013-05-11T00:14:48.377 に答える