2015-03-23 10 views
36

मैं स्विफ्ट के लिए नया हूं। मैं जावा प्रोग्रामिंग कर रहा हूं। स्विफ्ट में कोड के लिए मेरे पास एक परिदृश्य है।एक साथ दो एरे पर इटरेट

निम्नलिखित कोड जावा में है। मैं इस परिदृश्य पर

// With String array - strArr1 
String strArr1[] = {"Some1","Some2"} 

String strArr2[] = {"Somethingelse1","Somethingelse2"} 

for(int i=0;i< strArr1.length;i++){ 
    System.out.println(strArr1[i] + " - "+ strArr2[i]); 
} 

मैं तेजी से

var strArr1: [String] = ["Some1","Some2"] 
var strArr2: [String] = ["Somethingelse1","Somethingelse2"] 

for data in strArr1{ 
    println(data) 
} 

for data in strArr2{ 
    println(data) 
} 
// I need to loop over in single for loop based on index. 

में सरणियों की एक जोड़ी है आप सूचकांक

+0

आपका जावा कोड के साथ शुरू असुरक्षित है, के रूप में यह मानता है कि strArr2 एक ही लंबाई या StrArr1 (हार्ड-कोडेड सरणियों में आप काम करता है जो अधिक लंबी है, लेकिन कोड में जहां सरणी बदल सकती है, काम नहीं करेगी)। –

+0

हां, जावा कोड सिर्फ एक उदाहरण है। हमारे पास एक जांच है यदि strArr1.length == strArr2.length, अन्यथा हम वापस आते हैं। – Lohith

उत्तर

-2
के आधार पर अधिक पाशन के लिए वाक्यविन्यास पर आपकी मदद प्रदान करते हैं कृपया सकते हैं के लिए स्विफ्ट में कोड करने के लिए की जरूरत है
for(var i = 0; i < strArr1.count ; i++) 
{ 
    println(strArr1[i] + strArr2[i]) 
} 

ऐसा करना चाहिए। परीक्षण करने के लिए सुनिश्चित करने से पहले कभी भी स्विफ्ट का उपयोग नहीं किया।

+0

कूल यह काम करता है, धन्यवाद – Lohith

+3

स्विफ्ट 3.0 में लूप के लिए सी-शैली को बहिष्कृत किया गया है। – PopKernel

+0

धन्यवाद @PopKernel, स्विफ्ट 3.0 बाहर होने से पहले इसे पोस्ट किया गया था। – Erik

12

आप कर सकते थे भी enumerate एक सरणी पर और सूचकांक का इस्तेमाल किया दूसरी सरणी अंदर देखने के लिए:

स्विफ्ट 1.2:

for (index, element) in enumerate(strArr1) { 
    println(element) 
    println(strArr2[index]) 
} 

स्विफ्ट 2:

for (index, element) in strArr1.enumerate() { 
    print(element) 
    print(strArr2[index]) 
} 

स्विफ्ट 3:

for (index, element) in strArr1.enumerated() { 
    print(element) 
    print(strArr2[index]) 
} 
+0

यह स्विफ्ट के नवीनतम संस्करण में strArr1.enumerate() में बदल गया है। – robhasacamera

0

यदि आप अभी भी for in का उपयोग करना चाहते हैं तो आप Range का उपयोग कर सकते हैं।

var strArr1: [String] = ["Some1","Some2"] 
var strArr2: [String] = ["Somethingelse1","Somethingelse2"] 

for i in Range(start: 0, end: strArr1.count) { 
    println(strArr1[i] + " - " + strArr2[i]) 
} 
+0

या छोटा: मैं 0 में ..

82

आप zip() है, जो दो दिए गए दृश्यों से जोड़े की एक दृश्य बनाता का उपयोग कर सकते हैं:

let strArr1 = ["Some1", "Some2"] 
let strArr2 = ["Somethingelse1", "Somethingelse2"] 

for (e1, e2) in zip(strArr1, strArr2) { 
    print("\(e1) - \(e2)") 
} 

अनुक्रम दिया दृश्यों/सरणियों के केवल "आम तत्वों" विश्लेषण करता है। यदि उनके पास अलग-अलग लंबाई है तो अतिरिक्त लंबे सरणी/अनुक्रम के तत्वों को केवल अनदेखा कर दिया जाता है।

+0

तो ज़िप() 2 सरणी लेता है, और दोनों सरणी में सामान्य तत्वों के tuples की एक सरणी देता है? क्या 'ज़िप()' स्विफ्ट 2 सिंटैक्स है, या 'ज़िप 2' है? आपकी पहली वाक्य का तात्पर्य है कि 'ज़िप' स्विफ्ट 1.2 सिंटैक्स है, लेकिन आखिरी बिट इसे 'ज़िप' की तरह ध्वनि बनाता है स्विफ्ट 2 वाक्यविन्यास। –

+0

@ डंकनसी: आप सही हैं, अंतिम संपादन भ्रामक था। 'ज़िप() 'फ़ंक्शन स्विफ्ट 1.2 और स्विफ्ट 2 दोनों में काम करता है, केवल अंतर्निहित अनुक्रम प्रकार' ज़िप 2' से 'Zip2Sequence' में बदल जाता है।- इसमें दो अनुक्रम होते हैं (सरणी केवल एक विशेष मामला है) और आम तत्वों के tuples के साथ एक (आलसी मूल्यांकन) अनुक्रम देता है। –

8

इस प्रयास करें:

zip([0,2,4,6], [1,3,5,7]).forEach { 
    print($0,$1) 
} 

zip([0,2,4,6], [1,3,5,7]).forEach { 
    print($0.0,$0.1) 
} 
+0

महान स्विफ्ट दृष्टिकोण, धन्यवाद! – brainray

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