2013-02-08 7 views
5

जब मैं दो सरणी का चौराहे करता हूं, तो क्या कोई गारंटी है कि परिणामी क्रम पहली सरणी के क्रम पर आधारित है?घुसपैठ के दौरान सरणी में संरक्षित आदेश है?

उदाहरण के लिए, अगर मैं

a = [1,2,3] 
b = [3,2,1] 

सकता है a & b वापसी [3,2,1], [1,2,3] के बजाय (जो कि मैं क्या उम्मीद थी)?

मुझे आरडीओसी या पिकैक्स के ऐरे के प्रलेखन में सीधे इसे संबोधित करने में कुछ भी नहीं मिल रहा है।

रुबीस्पेक का एक विनिर्देश है कि यह creates an array with elements in order they are first encountered है, लेकिन मुझे लगता है कि YARV रूबी उस विनिर्देश का सम्मान करेंगे?

+1

सी कोड (http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-26) को तुरंत देखकर, मैं कहूंगा कि यह आदेश को संरक्षित करता है – pjam

उत्तर

3

ऐसा लगता है कि यह एक गारंटीकृत सुविधा है। उन्होंने revision 39415 में आरडीओसी विवरण को अपग्रेड किया। यह कभी-कभी परिलक्षित होना चाहिए।

0

YARV आधिकारिक रूबी दुभाषिया संस्करण 1.9 के बाद से है, इसलिए मुझे लगता है कि यह विनिर्देश उस सम्मान को सम्मानित करता है। और बीटीडब्लू, रूबीस्पेक को भाषा के निष्पादन योग्य विनिर्देश के रूप में बनाया गया था, जिससे डेवलपर्स को अपने स्वयं के दुभाषियों को बनाने की इजाजत मिलती है जो इस कल्पना को पार करते हैं और मेरा मानना ​​है कि रूबीस्पेक में इस के साथ YARV बनाया गया था।

+1

रुबीस्पेक के पास रूबी के विकास के साथ कोई आधिकारिक संबद्धता नहीं है, इसलिए यह गारंटी नहीं देता है कि एमआरआई/याएआरवी रूबी हमेशा इस तरह से काम करेंगे, लेकिन इससे भी ज्यादा यह है कि यह अब करता है। –

+0

@AndrewMarshall निश्चित रूप से, मैं ऐसा कुछ भी सुझाव नहीं दे रहा हूं। मैं बस इस बात को इंगित करना चाहता था और जैसा कि मैंने कहा था, मेरा मानना ​​है कि YARV इस spec का उपयोग कर रहा था, उदाहरण के लिए IronRuby। –

+0

रूबीस्पेक का कोई आधिकारिक संबद्धता नहीं है, लेकिन यह 2010 में एमआरआई परीक्षण सूट का हिस्सा था, और जब मैं इस पर काम कर रहा था (आयरन रूबी टीम के हिस्से के रूप में), वे सक्रिय रूप से इसमें भी योगदान दे रहे थे। –

0

दस्तावेज़ीकरण में कोई गारंटी नहीं है लेकिन छेड़छाड़ बाएं हाथ के सेट के आदेश का पालन करती है।

a = [1,2,3] 
b = [3,2,1] 

a.size.times do 
    puts "a = #{ a.join(',') }\ta & b = #{ (a & b).join(',') }\tb & a = #{ (b & a).join(',') }" 
    a.rotate! 
end 

कौन सा आउटपुट:

... 
for (i=0; i<RARRAY_LEN(ary1); i++) { 
    vv = (st_data_t)(v = rb_ary_elt(ary1, i)); 
    if (st_delete(RHASH_TBL(hash), &vv, 0)) { 
     rb_ary_push(ary3, v); 
    } 
} 
... 

यह परीक्षण करने के लिए सरल है:

स्रोत है कि सरणी a आदेश सेट से पता चलता

 
a = 1,2,3 a & b = 1,2,3 b & a = 3,2,1 
a = 2,3,1 a & b = 2,3,1 b & a = 3,2,1 
a = 3,1,2 a & b = 3,1,2 b & a = 3,2,1 

रूबी उपयोग कर रहा है यही कारण है कि 1.9.3- पी 374

+1

मुझे लगता है कि यह बात नहीं है। मुझे लगता है कि ओपी जानता है कि आदेश संरक्षित है (कम से कम वर्तमान एमआरआई कार्यान्वयन के तहत)। पूछा जाता है कि क्या यह एक विशेषता के रूप में है या नहीं। दूसरे शब्दों में, यदि विधि को लागू करने के लिए एक नया सी एल्गोरिदम पाया गया था कि आदेश को संरक्षित नहीं करता है, तो भविष्य के कार्यान्वयन आदेश को संरक्षित नहीं करेगा, या यह आदेश को संरक्षित रखेगा। – sawa

+1

@sawa इस पर एक बग रिपोर्ट पोस्ट करने के लिए धन्यवाद! –

+1

@AndrewGrimm आपका स्वागत है। मुझे यकीन नहीं था कि आप नोटिस करेंगे। उम्मीद है कि आप इसे पसंद करेंगे। http://bugs.ruby-lang.org/issues/7803 – sawa

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