ম্যাথ.ম্যাক্সের মতো তবে 3 বা প্যারামগুলি লাগে?
ধন্যবাদ
ম্যাথ.ম্যাক্সের মতো তবে 3 বা প্যারামগুলি লাগে?
ধন্যবাদ
উত্তর:
ঠিক আছে, আপনি কেবল এটি দুটি বার কল করতে পারেন:
int max3 = Math.Max(x, Math.Max(y, z));
আপনি যদি নিজেকে এটি অনেক কিছু করতে দেখেন তবে আপনি সর্বদা আপনার নিজের সহায়ক পদ্ধতি লিখতে পারেন ... আমি আমার কোড বেসে এটি একবার দেখে যথেষ্ট খুশি হব তবে নিয়মিত নয়।
(দ্রষ্টব্য যে এটি অ্যান্ড্রুয়ের লিনকিউ-ভিত্তিক উত্তরের চেয়ে বেশি কার্যকরী হওয়ার সম্ভাবনা রয়েছে - তবে স্পষ্টতই লিনকিউ পদ্ধতির কাছে আপনার কাছে যত বেশি আবেদন রয়েছে তত বেশি উপাদান রয়েছে))
সম্পাদনা: একটি "উভয় বিশ্বের সেরা" পদ্ধতির কোনও উপায়ের নিজস্ব কাস্টম সেট থাকতে পারে:
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)আপনি যখন ওভারহেডকে কিছু মনে করেন না তখনও দুর্দান্ত পঠনযোগ্য এবং ধারাবাহিক কোডের জন্য লিখতে পারেন।
আমি লিনকিউ পদ্ধতির সুস্পষ্ট অ্যারে তৈরির চেয়ে ব্যক্তিগতভাবে এটিকে আরও পঠনযোগ্য বলে মনে করি ।
MoreMath.Max(x, y, z)আইএমও-র লাইনকিউ পদ্ধতির চেয়ে আরও বেশি পঠনযোগ্য।
public static int Max(params int[] values) ?
Max(1, 2, 3)অ্যারে তৈরি করবে। অপেক্ষাকৃত কম সংখ্যক প্যারামিটারের জন্য কয়েকটি ওভারলোড সরবরাহ করে, আপনি কলারের পাঠযোগ্যতার উপর প্রভাব না ফেলে এটিকে আরও দক্ষ করে তুলতে পারেন।
আপনি ব্যবহার করতে পারেন Enumerable.Max:
new [] { 1, 2, 3 }.Max();
[]। নিফটি
new int[] { 1,2,3 }। সুতরাং এটি টাইপ ইন্টের একটি অ্যারে, যা এর বিষয়বস্তু দ্বারা স্পষ্টভাবে নির্ধারিত হয়।
লিনকের একটি সর্বাধিক ফাংশন রয়েছে।
আপনার যদি থাকে তবে আপনি 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 এর সর্বাধিক সংজ্ঞা নেই বা আপনার অগণনীয় অ্যাক্সেস নেই, সর্বাধিক 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;
}
}
এই ফাংশনটি পূর্ণসংখ্যার অ্যারে নেয়। (অ্যারে পাঠানোর বিষয়ে @ জোন স্কিটের অভিযোগ আমি পুরোপুরি বুঝতে পারি))
এটি সম্ভবত কিছুটা ওভারকিল।
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