2009-12-09 15 views
7
def l = ["My", "Homer"] 
String s = "Hi My Name is Homer" 

def list = s.split(" ") 
println list 

list.each{it -> 
    l.each{it1 -> 
     if (it == it1) 
      println "found ${it}" 
    } 
} 

मैं कि क्या बड़ी सूची की जांच करना चाहते हैं, इसकी जांच करने (list) sublist के सभी तत्व शामिल हैं (l) किसी भी तरीकों में बनाया गया यह जाँच की है ग्रूवी करता है करने के लिए या क्या मैं में है उपरोक्त कोड क्या करेगा?यदि एक सूची एक sublist

उत्तर

18

आप ग्रोवी की Collection.intersect(Collection right) विधि का उपयोग कर सकते हैं और जांच सकते हैं कि लौटाया गया संग्रह उतना ही बड़ा है जितना कि तर्क के रूप में पारित किया गया है।

आप String.tokenize() विधि का उपयोग करने से पहले जो एक स्ट्रिंग सरणी देता है String.split() के बजाय स्ट्रिंग से एक सूची उत्पन्न करने के लिए है:

def sublist = ["My", "Homer"] 
def list = "Hi My Name is Homer".tokenize() 

assert sublist.size() == list.intersect(sublist).size() 

वैकल्पिक रूप से, आप ग्रूवी के Object.every(Closure closure) विधि का उपयोग करें और जांच कर सकता है, तो के प्रत्येक तत्व sublist सूची में शामिल है:

assert sublist.every { list.contains(it) } 

हालांकि, सबसे छोटा रास्ता मानक जावा संग्रह एपीआई का उपयोग कर रहा है:

assert list.containsAll(sublist) 
-2

आपका समाधान काम करेगा। यदि आप अपेक्षाकृत कुछ अलग-अलग मूल्यों के बड़े सरणी से निपट रहे हैं तो Knuth–Morris–Pratt algorithm पर विचार करना सुनिश्चित करें।

+0

वह करता है, तो उसके समाधान काम करेगा या नहीं पूछ नहीं किया गया था, वह पूछ रहा था यदि कोई भी कार्य करता है तो वह इसके बजाय ऐसा करने के लिए उपयोग कर सकता है। – Gord

+0

मुझे किसी के बारे में पता नहीं है। – Matthew

7

सबसे आसान तरीका सिर्फ कॉल करने के लिए किया जाता है:

list.containsAll(l) 

आप यहाँ इसके बारे में अधिक जानकारी प्राप्त कर सकते हैं: Groovy Collections

संबंधित मुद्दे