2011-10-22 14 views
12

यह एक चीज है जिसने मुझे कई बार सोचने के लिए बनाया है। इस उदाहरण में मैं एक सरणी है और इस सरणी 10 मानों commatas से अलग किया जाना चाहिए, लेकिन अभी मैं एक काउंटर का इस्तेमाल किया पिछले एक के बाद वहाँ एक commata नहीं होना चाहिए है:यह निर्धारित करने के लिए कि एक रिकॉर्ड पुनरावृत्ति में पहला/आखिरी वाला रिकॉर्ड है या नहीं?

data = ["john", "james", "henry", "david", "daniel", "jennifer", "ruth", "penny", "robin", "julia"] 
counter = 0 
count = data.size 
sentence = String.new 
data.each do |name| 
    if counter == (count-1) 
      sentence += name 
    else 
      sentence += "#{name}, " 
    end 
    counter += 1 
end 

लेकिन यह कोई इतना गंदा नहीं है है यह पता लगाने के लिए कि क्या वर्तमान वस्तु (इस मामले में "नाम") फ्रिस्ट है या पुनरावृत्ति में आखिरी है?

+1

'data.join (',')' अगर मैं आप सही तरीके से – user973254

उत्तर

25
इस विशिष्ट मामले में

, data.join(', ') करना होगा, अधिक आम तौर पर data.each {|d| #do stuff unless d.equal? data.last}

+1

समझा '==' विफल हो जाएगा अगर वहाँ सूची में है एक और 'जूलिया'। ऑब्जेक्ट समानता के लिए 'd.equal? ​​(data.last) 'परीक्षण। – steenslag

+1

बेशक - हमेशा अनोखा मामला न भूलें - धन्यवाद - मैंने जवाब को सही किया है, इसलिए टिप्पणियों को पढ़ने के बिना कोई भी प्रतियां नहीं – chrispanda

5

आप name==data.last उपयोग कर सकते हैं यदि आपके सरणी अद्वितीय तत्व

की है अन्यथा सीधे का उपयोग

data.join(', ') 
6

आप data.join(', ') की जरूरत है। किसी भी तरह, आपके प्रश्न का उत्तर दें:

क्या यह पता लगाने के लिए कोई तरीका नहीं है कि वर्तमान वस्तु (इस मामले में "नाम") पुनरावृत्ति में पहला या आखिरी वाला है या नहीं?

xs = [1, 2, 3, 4] 
xs.each.with_index do |x, index| 
    if index == 0 
    puts("First element: #{x}") 
    elsif index == xs.size - 1 
    puts("Last element: #{x}") 
    else 
    puts("Element somewhere in the middle: #{x}") 
    end 
end 
संबंधित मुद्दे

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