Cách nhanh nhất để đếm số lần một chuỗi nhất định xuất hiện trong một chuỗi lớn hơn là gì? Dự đoán tốt nhất của tôi là thay thế tất cả các trường hợp của chuỗi đó bằng không, tính toán độ dài của độ dài và chia cho độ dài của chuỗi con, nhưng điều đó có vẻ khá chậm và tôi cần phân tích một lượng lớn dữ liệu.Đếm số lần xuất hiện của một chuỗi trong một chuỗi khác (Perl)
Trả lời
Bạn có thể nắm bắt các chuỗi, sau đó đếm chúng. Nó có thể được thực hiện bằng cách áp dụng một bối cảnh danh sách để chụp với ()
:
my $x = "foo";
my $y = "foo foo foo bar";
my $c =() = $y =~ /$x/g; # $c is now 3
Bạn cũng có thể chụp đến một mảng và đếm mảng. Cùng nguyên tắc, kỹ thuật khác nhau:
my @c = $y =~ /$x/g;
my $count = @c;
Cảm ơn! Nó rất giống với giải pháp thứ hai. – ronash
@ronash Đó là giải pháp tương tự. Một sử dụng biến tạm thời, cái kia thì không. Bạn cũng có thể làm 'my $ count = @c = $ y = ~/$ x/g', nhưng thay vào đó bạn có thể đơn giản bỏ qua' @ c' và sử dụng '()'. Cái nào là tốt nhất, nếu bạn không quan tâm đến các trận đấu thực tế. – TLP
Điều này không có tác dụng nếu '$ x' chứa các ký tự regex nhất định, vì' $ x' được hiểu là regex. Thêm '\ Q' để sửa lỗi này, vd. '/ \ Q $ x/g'. Xem 'quotemeta' để biết thêm thông tin. – tuomassalo
Bạn có thể sử dụng regex chung. Một cái gì đó như:
my @matches = $bigstring =~ /($littlestring)/g;
my $count = @matches;
Điều đó có vẻ giống như giải pháp đơn giản nhất, vì vậy tôi nghĩ tôi sẽ sử dụng nó, trừ khi có một giải pháp nhanh hơn? Cảm ơn! – ronash
Tôi không chắc chắn về tốc độ của regex, nhưng tôi chắc chắn rằng chỉ cần sử dụng các hoạt động phù hợp nhanh hơn thay thế. Và tôi không thể nghĩ ra một giải pháp không liên quan gì đến regex (sẽ rất thú vị nếu bạn nhìn thấy khác!) – MattLBeck
my $string = "aaaabbabbba";
my @count = ($string =~ /a/g);
print @count . "\n";
hoặc
my $count = ($string =~ s/a/a/g);
Cảm ơn! Điều đó có hiệu quả nếu có nhiều hơn một lá thư được tìm kiếm không? – ronash
Erm, vâng ... đó là cụm từ thông dụng, bạn có thể đối sánh với bất kỳ thứ gì. –
Trên giải pháp thứ hai của bạn, sẽ không tr/a/a/g là một giải pháp tốt hơn, bởi vì bạn thay thế các nhân vật của chính nó và tr là nhanh hơn trên đó hơn s? – nerdbeere
Chỉ cần cho đầy đủ bạn liên tục có thể gọi hàm chỉ mục trong một vòng lặp và đếm tất cả các lần nó trở lại chỉ số của chuỗi con trong chuỗi và thay đổi vị trí bắt đầu. Điều đó sẽ tránh sử dụng regexes, và trong thử nghiệm của tôi là nhanh hơn một chút so với các giải pháp regex.
Tôi đã thích nghi một tiểu để làm điều đó từ đây: http://www.misc-perl-info.com/perl-index.html
sub occurrences {
my($x, $y) = @_;
my $pos = 0;
my $matches = 0;
while (1) {
$pos = index($y, $x, $pos);
last if($pos < 0);
$matches++;
$pos++;
}
return $matches;
}
- 1. Đếm số lần một chuỗi xuất hiện trong một chuỗi
- 2. Một lớp lót để đếm số lần xuất hiện của chuỗi trong một chuỗi [] trong Java?
- 3. Đếm số lần xuất hiện ký tự trong một chuỗi
- 4. Công thức trong Excel để đếm số lần xuất hiện của các chuỗi trong chuỗi
- 5. Đếm tất cả các lần xuất hiện của một chuỗi trong nhiều tệp với grep
- 6. Làm cách nào để đếm số lần xuất hiện của ký tự '/' trong chuỗi C?
- 7. Số lần một ký tự cụ thể xuất hiện trong một chuỗi
- 8. Đếm số lần xuất hiện của một số trong một danh sách
- 9. Số lần xuất hiện của một ký tự trong một chuỗi
- 10. Cách tìm số lần xuất hiện cuối cùng của một số trong chuỗi bằng Ruby?
- 11. tsql "lần xuất hiện cuối cùng" bên trong một chuỗi
- 12. Làm thế nào để đếm số lần xuất hiện của một ký tự trong một giá trị varchar của Oracle?
- 13. Mục tiêu-C: Đếm số lần một đối tượng xuất hiện trong một mảng?
- 14. Regex: Số lần xuất hiện số lẻ của một từ
- 15. Xóa tất cả các lần xuất hiện của chuỗi trong một chuỗi từ danh sách python
- 16. Thay thế một lần xuất hiện chuỗi Obj-c
- 17. Đếm số lần mỗi từ trong một danh sách từ xuất hiện trong một tệp?
- 18. Javascript: Số lần một ký tự xuất hiện trong một chuỗi
- 19. Oracle/SQL - Đếm số lần xuất hiện của các giá trị trong một cột đơn
- 20. Làm cách nào để đếm số lần xuất hiện chuỗi con?
- 21. Thay thế tất cả các lần xuất hiện của một mẫu trong một chuỗi
- 22. Jquery chỉ đếm số trong một chuỗi
- 23. Đếm số chấm trong một chuỗi
- 24. Đếm số nguyên trong một chuỗi
- 25. cách đếm số '#' trong chuỗi?
- 26. đếm lần xuất hiện cuối dòng
- 27. Thuật toán đếm số lần xuất hiện của ma trận bên trong một lớn hơn
- 28. chuỗi dài nhất xuất hiện n lần
- 29. C# Nối x lần xuất hiện của một ký tự vào một chuỗi
- 30. Cách thay thế các lần xuất hiện của nhiều chuỗi bằng nhiều chuỗi khác [NSString]
Có thể muốn kiểm tra này ra ... mặc dù đó là từ năm 1999, và có nhiều khả năng những cách khác để làm điều này loại hiệu quả: http://www.perlmonks.org/?node=How%20can%20I%20count%20the%20number%20of%20occurrences%20of%20a%20substring%20within%20a%20string%3F – summea
'perldoc -q count ' – toolic
Những nội dung này có thể trùng lặp không? – tchrist