मेरे पास डेटा नीचे कुछ जैसा है:
$ data = [[qw (xy) ], [Qw (x)], [qw (xz)], [qw (z)],];
और मैं इसे नीचे की तरह कुछ में परिवर्तित करना चाहूंगा:
[x, x, x, z]
नियम पहले तत्व से शुरू हो रहा है, पहले दो तत्वों के बीच सामान्य तत्व ढूंढें, यदि कोई सामान्य पाया गया है, तो दोनों तत्वों के लिए सामान्य मान असाइन करें अब दूसरे और तीसरे तत्व को चुनें, यदि उन दोनों के बीच कोई भी आम मान है तो वही करो और जब तक आप अंतिम तत्व तक नहीं पहुंच जाते तब तक जारी रखें। यदि आप पिछले दो युग्मों के बीच सामान्य मान पाते हैं तो केवल उसे अंतिम तत्व में निर्दिष्ट करें।
यह लगता है जैसे आप अपने डेटा बिंदुओं के किसी प्रकार के चौराहे की गणना करना चाहते हैं? मैं ऐसा कुछ करूँगा:
#! / Usr / bin / env perl सख्त; चेतावनियों का उपयोग करें; ऑटोडी का उपयोग करें; डेटा का उपयोग करें: Dumper; मेरा @डेटा = ([qw (x y)], [qw (x)], [qw (x z)], [qw (z)],); उप intersect {my ($ a, $ b) = @_; मेरी $ union = {}; मेरी $ isect = {}; विदेशी मुद्रा $ $ ($ $ a, @ $ b) {$ union- & gt; {$ e} ++ & amp; amp; $ Isect- & gt; {$ ई} ++; } वापसी कुंजी% $ isect; } मेरे @ रुट = (); मेरे $ i (0 .. $ # डेटा - 1) {my @intersection = intersect ($ डेटा [$ i], $ डेटा [$ i + 1]) के लिए; अगर (स्केलर @ चिह्न) {my $ isect = shift @ छद्म; अगर ($ i == 0) {push @result, $ isect; } धक्का @ रुट, $ isect; } Else {die sprintf ("डेटा अंक स्थिति% डी पर छेद नहीं करते", $ i + 1); }} प्रिंट Dumper \ @result;
इस स्क्रिप्ट को चलाने से मुझे निम्न आउटपुट मिलता है:
$ ./intersection.pl $ VAR1 = ['x', 'x', 'x ',' जेड '];
आशा है कि यह मदद करता है।
एक और कोष्ठक
विधि भी Array :: Utils
पैकेज में उपलब्ध है सीपीएएन।
No comments:
Post a Comment