2011-12-24 6 views

उत्तर

30

आपका अक्षर और अंक tuples, सूची नहीं है नहीं। तो चलो ठीक है कि

scala> val letters = List('a', 'b', 'c', 'd', 'e') 
letters: List[Char] = List(a, b, c, d, e) 

scala> val numbers = List(1,2)      
numbers: List[Int] = List(1, 2) 

अब, अगर हम उन्हें ज़िप हम नहीं वांछित परिणाम

scala> letters zip numbers 
res11: List[(Char, Int)] = List((a,1), (b,2)) 

मिलता है चलो लेकिन वह पता चलता है कि अगर संख्या असीम फिर दोहराया गया समस्या हल की जाएगी

scala> letters zip (Stream continually numbers).flatten 
res12: List[(Char, Int)] = List((a,1), (b,2), (c,1), (d,2), (e,1)) 

दुर्भाग्यवश, यह ज्ञान पर आधारित है कि संख्या अक्षरों से कम है। तो यह सब ठीक करने के लिए ऊपर

scala> ((Stream continually letters).flatten zip (Stream continually numbers).flatten take (letters.size max numbers.size)).toList 
res13: List[(Char, Int)] = List((a,1), (b,2), (c,1), (d,2), (e,1)) 
7

सूचियों के छोटे अनिश्चित काल के दोहराया जाना चाहिए संभव है। इस मामले में यह स्पष्ट है कि numbers कम है, लेकिन मामले में आप इसे सामान्य रूप में काम करने की जरूरत है, तो यहां आप यह कर सकते है:

def zipLongest[T](list1 : List[T], list2 : List[T]) : Seq[(T, T)] = 
    if (list1.size < list2.size) 
    Stream.continually(list1).flatten zip list2 
    else 
    list1 zip Stream.continually(list2).flatten 

val letters = List('a', 'b', 'c', 'd', 'e') 
val numbers = List(1, 2) 

println(zipLongest(letters, numbers)) 
1

आप एक सरल एक लाइनर कर सकता है, map विधि

val letters = List('a', 'b', 'c', 'd', 'e') 
val numbers = List(1, 2) 

val longZip1 = letters.zipWithIndex.map(x => (x._1, numbers(x._2 % numbers.length))) 

//or, using a for loop 
//for (x <- letters.zipWithIndex) yield (x._1, numbers(x._2 % numbers.size)) 
0

का उपयोग कर आप सूची डेटा के किसी भी पुन: उपयोग करने हालांकि आप को पता है की आवश्यकता होगी नहीं करना चाहते हैं क्या अंतराल हैं समय से आगे के साथ भरे जाने के लिए:

val result = (0 to (Math.max(list1.size, list2.size) - 1)) map { index => 
(list1.lift(index).getOrElse(valWhen1Empty),list2.lift(index).getOrElse(valWhen2Empty)) 
} 

मुझे शक है इस अनंत सूचियों या पाठ्यक्रम की धाराओं के साथ अच्छी तरह से काम करेगा ...

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