मैथ.मैक्स की तरह लेकिन इंट के 3 या पारम्स लेता है?
धन्यवाद
मैथ.मैक्स की तरह लेकिन इंट के 3 या पारम्स लेता है?
धन्यवाद
जवाबों:
ठीक है, आप इसे केवल दो बार कॉल कर सकते हैं:
int max3 = Math.Max(x, Math.Max(y, z));
यदि आप अपने आप को ऐसा करते हुए पाते हैं, तो आप हमेशा अपनी सहायक विधि लिख सकते हैं ... मुझे खुशी होगी कि मैं एक बार अपने कोड बेस में इसे देखूंगा , लेकिन नियमित रूप से नहीं।
(ध्यान दें कि यह एंड्रयू के LINQ- आधारित उत्तर की तुलना में अधिक कुशल होने की संभावना है - लेकिन स्पष्ट रूप से आपके पास जितना अधिक तत्व LINQ दृष्टिकोण है उतना ही आकर्षक है।)
संपादित करें: "दोनों दुनिया के सर्वश्रेष्ठ" दृष्टिकोण किसी भी तरह से कस्टम सेट हो सकते हैं:
public static class MoreMath
{
// This method only exists for consistency, so you can *always* call
// MoreMath.Max instead of alternating between MoreMath.Max and Math.Max
// depending on your argument count.
public static int Max(int x, int y)
{
return Math.Max(x, y);
}
public static int Max(int x, int y, int z)
{
// Or inline it as x < y ? (y < z ? z : y) : (x < z ? z : x);
// Time it before micro-optimizing though!
return Math.Max(x, Math.Max(y, z));
}
public static int Max(int w, int x, int y, int z)
{
return Math.Max(w, Math.Max(x, Math.Max(y, z)));
}
public static int Max(params int[] values)
{
return Enumerable.Max(values);
}
}
इस तरह आप सरणी निर्माण के ओवरहेड के बिना MoreMath.Max(1, 2, 3)या MoreMath.Max(1, 2, 3, 4)बिना लिख सकते हैं , लेकिन फिर भी MoreMath.Max(1, 2, 3, 4, 5, 6)जब आप ओवरहेड का बुरा नहीं मानते हैं तो अच्छा पठनीय और सुसंगत कोड लिखें ।
मुझे व्यक्तिगत रूप से LINQ दृष्टिकोण के स्पष्ट सरणी निर्माण की तुलना में अधिक पठनीय लगता है ।
MoreMath.Max(x, y, z)LINQ दृष्टिकोण, IMO से भी अधिक पठनीय है।
public static int Max(params int[] values) ?
Max(1, 2, 3)बिना किसी कारण के एक सरणी बनाएगी। अपेक्षाकृत कम संख्या में मापदंडों के लिए कुछ अधिभार प्रदान करके, आप कॉलर की पठनीयता को प्रभावित किए बिना इसे और अधिक कुशल बना सकते हैं।
आप उपयोग कर सकते हैं Enumerable.Max:
new [] { 1, 2, 3 }.Max();
[]। निफ्टी।
new int[] { 1,2,3 }। तो यह एक प्रकार की सरणी है, जो कि इसकी सामग्री द्वारा स्पष्ट रूप से निर्धारित की जाती है।
Linq में एक मैक्स फंक्शन है।
यदि आपके पास एक है IEnumerable<int>तो आप इसे सीधे कॉल कर सकते हैं, लेकिन यदि आपको अलग-अलग मापदंडों में इनकी आवश्यकता होती है, तो आप इस तरह से एक फ़ंक्शन बना सकते हैं:
using System.Linq;
...
static int Max(params int[] numbers)
{
return numbers.Max();
}
तब आप इसे इस तरह कह सकते हैं: max(1, 6, 2)यह एक अनियंत्रित मापदंडों के लिए अनुमति देता है।
Maxके बजाय max, और यह स्थिर :) कम मापदंडों के लिए यह अधिक भार से बनाने के लिए, आप इसे और अधिक भी कुशल बना सकते हैं।
जेनेरिक के रूप में
public static T Min<T>(params T[] values) {
return values.Min();
}
public static T Max<T>(params T[] values) {
return values.Max();
}
बंद विषय लेकिन यहाँ मध्यम मूल्य के लिए सूत्र है .. बस मामले में किसी को इसकी तलाश है
Math.Min(Math.Min(Math.Max(x,y), Math.Max(y,z)), Math.Max(x,z));
, तो जो भी कारण के लिए (जैसे अंतरिक्ष इंजीनियर्स एपीआई), System.array मैक्स के लिए कोई परिभाषा है और न ही आप Enumerable, के मैक्स के लिए एक समाधान के लिए उपयोग किया n मूल्यों है:
public int Max(int[] values) {
if(values.Length < 1) {
return 0;
}
if(values.Length < 2) {
return values[0];
}
if(values.Length < 3) {
return Math.Max(values[0], values[1]);
}
int runningMax = values[0];
for(int i=1; i<values.Length - 1; i++) {
runningMax = Math.Max(runningMax, values[i]);
}
return runningMax;
}
आप इस कोड को आज़मा सकते हैं:
private float GetBrightestColor(float r, float g, float b) {
if (r > g && r > b) {
return r;
} else if (g > r && g > b) {
return g;
} else if (b > r && b > g) {
return b;
}
}
यह फ़ंक्शन पूर्णांक की एक सरणी लेता है। (मैं सरण भेजने के बारे में @Jon Skeet की शिकायत को पूरी तरह से समझता हूं।)
यह शायद थोड़ा ज्यादा है।
public static int GetMax(int[] array) // must be a array of ints
{
int current_greatest_value = array[0]; // initializes it
for (int i = 1; i <= array.Length; i++)
{
// compare current number against next number
if (i+1 <= array.Length-1) // prevent "index outside bounds of array" error below with array[i+1]
{
// array[i+1] exists
if (array[i] < array[i+1] || array[i] <= current_greatest_value)
{
// current val is less than next, and less than the current greatest val, so go to next iteration
continue;
}
} else
{
// array[i+1] doesn't exist, we are at the last element
if (array[i] > current_greatest_value)
{
// current iteration val is greater than current_greatest_value
current_greatest_value = array[i];
}
break; // next for loop i index will be invalid
}
// if it gets here, current val is greater than next, so for now assign that value to greatest_value
current_greatest_value = array[i];
}
return current_greatest_value;
}
फिर फ़ंक्शन को कॉल करें:
int highest_val = GetMax (new[] { 1,6,2,72727275,2323});
// highest_val = 72727275