我想檢查一個字符串是否不止一次出現在一個數組中。我找到了一種方法,但它需要從CPAN安裝一些東西。我沒有root權限可以安裝有問題的CPAN模塊,因此我寧願在不使用CPAN的情況下執行此操作。如何檢查一個字符串是否不止一次出現在數組中?
回答
my $count = grep $_ eq $word, @array;
爲求值列表的每個元素(在本地設定
$_
到每個元件)的BLOCK或EXPR並返回由該表達式評估爲真這些元素的列表值。在標量上下文中,返回表達式爲真的次數。
編輯:我認爲你的「字符串」不一定是離散的元素。爲了計算完全匹配的每個元素,收緊匹配(即使用/^...$/
)或使用eq
,正如Sinan在評論中指出的那樣。
你可以指望的次數grep
數組中的字符串相匹配:
my @animals = qw/duck goose camel squirrel camel camelback/ ;
if (scalar (grep { /^camel$/ } @animals) > 1) {
print "more than one" ;
}
較短的形式:
say "more" if (grep /^camel$/, @animals) > 1 ;
say ~~(grep /^camel$/, @animal);
「~~
」 是短期的 「scalar
」 在這裏。
oops yup'~~'不需要用'if' ...忘記。謝謝。我通常在're.pl'或調試器中使用這些短行數來計算匹配的元素,而不是計算確切的數字。我加載了我最喜歡的模塊(用於計算我使用「'true」「)。我用'grep =「camel」,@ animals'(而不是'eq')多次拋棄了一些東西。對不起,馬虎。將爲後人修復。 – 2015-03-31 01:48:57
@SinanÜnür - 按照評論編輯。謝謝。 – 2015-03-31 02:20:45
當向Stack Overflow尋求幫助時,通常會希望您顯示一些代碼,以便我們幫助您和。這不是在Perl編程中獲得碰撞過程的地方。
處理此問題的最通用的方法是構建一個散列,其中的鍵是列表中的所有不同值,並且值是該項出現的次數。這個程序不正是發現發生的值不止一次
use strict;
use warnings;
use 5.010;
my @animals = qw/ duck goose camel squirrel camel /;
my %counts;
++$counts{$_} for @animals;
say for grep $counts{$_} > 1, keys %counts;
輸出
camel
或者,如果你有,你要檢查它是否多次發生特定的值,您可以查詢哈希直接
if ($counts{goose} > 1) {
...
}
「'%seen'哈希」似乎是最常用的方法,並且這樣做是正確的(使用'grep $ _eq $ match,@array;'是最簡單的,但更傾向於PEBKAC)。作爲一個獎勵,你可以使'++ $ count {$ _}'看起來簡短而甜蜜:-)不會有更明確的語法(但以其自己的方式含括)像count(「string」,@array)對'List :: Util'或'List :: MoreUtils'做一個有用的補充? – 2015-03-31 02:42:30
所以我想現在我想了解原型? ...或者,如何讓子計數($ @){my $ string = shift; scalar grep $ _ eq $ string,@_}'或'sub count($ @){my $ s = shift;我的%count; @_的++ $ count {$ _};返回$ count {$ s}; 「感覺更」內置「。 – 2015-03-31 03:01:00
只是注意到上述不是我的想法...所以它可能不是那麼糟糕;-) * eg * ['autobox :: Core'](http://www.metacpan.org/pod/autobox ::核心)做了一些類似「核心」的事情,涉及「' - > count()'」:...'說[qw /駱駝松鼠鴨camelhair駱駝鵝/] - >數(「駱駝」)''。但它只是在'autobox :: Core'中的「核心」 – 2015-03-31 14:33:56
- 1. 如何檢查一個字符是否一次或多次出現在字符串中?
- 2. 如何檢查一個字符串是否在C中的字符串數組?
- 3. 檢查數組中的字符串是否出現在LINQ中的另一個字符串數組中?
- 4. F#:檢查一個值是否是一個字符串數組,字符串數組或字符串數組
- 5. 如何檢查一個字符串數組是否爲空?
- 6. 檢查是否出現|在一個複雜的字符串
- 7. 檢查一次出現在字符串中相同字符的
- 8. 如何檢查一組字是否在字符串中與PHP
- 9. 檢查一個數組是否包含一個字符串
- 10. 如何檢查一個字符串是否是數字?
- 11. 檢查數組中是否有任何子串出現在字符串中?
- 12. 字符串出現在另一個字符串中的次數
- 13. 如何檢查一個字符串是否是一個HashMap
- 14. 如何檢查一個對象是否是一個字符串?
- 15. 檢查數組是否在一個字符串內
- 16. 檢查輸入字符串中是否至少出現一個非數字值
- 17. 如何檢查一個子串是否在Python的列表中多次出現?
- 18. xpath - 檢查元素是否不止一次出現
- 19. 檢查一個字符串是否包含任何一組字符串?
- 20. 如何檢查在jQuery.inArray()中是否在另一個數組中找到了一個字符串元素數組?
- 21. 檢查一個字符在URL中出現一次
- 22. 我如何檢查一組中的字符串是否是Python 2.7中另一個字符串的一部分?
- 23. 檢查一個字符串是否包含任何字符串數組元素
- 24. iOS:如何檢查一個字符串是否只有數字?
- 25. Java,如何檢查一個字符串是否包含數字?
- 26. 如何檢查是否字符串包含在一個數組中的AutoHotkey
- 27. 檢查字符串A中是否出現多個字符?
- 28. SQL檢查列不止一次出現
- 29. 如何檢查一個字符串是否在Elixir中爲空
- 30. 如何檢查一個字符串是否包含在ArrayList中?
'的perldoc -f grep' – toolic 2015-03-31 00:28:25
首先,你不必是'root'使用CPAN模塊,但那是另一 話題。第二,**你有什麼嘗試**?你甚至不能寫一個簡單的循環來通過一個數組? – 2015-03-31 00:28:59
您找到的CPAN模塊的名稱是什麼?哪些功能看起來有用?你試過什麼了?您可以通過添加更多信息來稍微改進此問題(這實際上是一個FAQ),以便其他SO用戶可以使用它。 – 2015-03-31 03:07:58