मुझे एक सरणी में अंक की प्रत्येक जोड़ी के बीच दूरी की गणना करने की आवश्यकता है और केवल प्रति जोड़ी एक बार करना है। क्या मैं काफी कुशलता से आया हूं या क्या कोई बेहतर तरीका है? यहाँ है कि मैं क्या प्राप्त करने के लिए कोशिश कर रहा हूँ समझाने के लिए एक उदाहरण है, एक दृश्य के साथ:सी # सरणी में डुप्लिकेट संचालन से बचने का सबसे प्रभावी तरीका क्या है?
उदाहरण के लिए, पहले खंडों ए-बी, ए सी, ए-डी मिलता है, फिर बी-सी, बी-डी; और अंत में, सी-डी। दूसरे शब्दों में, हम अपने नए सरणी में ए-बी चाहते हैं, लेकिन बी-ए नहीं, क्योंकि यह एक डुप्लिकेशंस होगा।
var pointsArray = new Point[4];
pointsArray[0] = new Point(0, 0);
pointsArray[1] = new Point(10, 0);
pointsArray[2] = new Point(10, 10);
pointsArray[3] = new Point(0, 10);
// using (n * (n-1))/2 to determine array size
int distArraySize = (pointsArray.Length*(pointsArray.Length - 1))/2;
var distanceArray = new double[distArraySize];
int distanceArrayIndex = 0;
// Loop through points and get distances, never using same point pair twice
for (int currentPointIndex = 0; currentPointIndex < pointsArray.Length - 1; currentPointIndex++)
{
for (int otherPointIndex = currentPointIndex + 1;
otherPointIndex < pointsArray.Length;
otherPointIndex++)
{
double xDistance = pointsArray[otherPointIndex].X - pointsArray[currentPointIndex].X;
double yDistance = pointsArray[otherPointIndex].Y - pointsArray[currentPointIndex].Y;
double distance = Math.Sqrt(Math.Pow(xDistance, 2) + Math.Pow(yDistance, 2));
// Add distance to distanceArray
distanceArray[distanceArrayIndex] = distance;
distanceArrayIndex++;
}
}
इस के बाद से अंक के कई हजारों के साथ इस्तेमाल किया जाएगा, मैं सोच रहा हूँ एक ठीक dimensioned सरणी IEnumerable किसी भी प्रकार का उपयोग करने की तुलना में अधिक कुशल हो जाएगा।
यह अच्छा लगता है। यह दोनों कुशल और काम करेगा। क्या आप इसे कोड समीक्षा में पोस्ट करना चाहते थे? http://codereview.stackexchange.com/ – yamen
@Yamen मुझे उस विकल्प से अवगत नहीं था। क्या कोई तरीका है कि मैं इस सवाल को वहां पर ले जा सकता हूं? धन्यवाद! – Stonetip
मेरी भावना यह है कि यह सबसे अच्छा तरीका है; मानते हैं कि सभी बिंदु अद्वितीय हैं, फिर तार्किक रूप से बिंदुओं के सेट से सभी संयोजन उत्पन्न करने का सबसे अच्छा तरीका पूरे सेट पर एक बार फिर से शुरू करना है, और उसके बाद प्रत्येक पुनरावृत्ति के भीतर उस बिंदु से बाकी हिस्सों में पुनरावृत्ति होती है। एर्गो आप संयोजन 'ए, बी' और 'बी, ए' कभी नहीं उत्पन्न करेंगे।उस ने कहा, यह मानता है कि आपको बिल्कुल * दूरी को स्टोर करने की आवश्यकता है और वास्तव में उन्हें विज्ञापन की गणना करने पर भरोसा नहीं कर सकता है। लेकिन फिर यह आपके प्रश्न के दायरे से बाहर है –