অ্যারে ক্লাসে আরোহী ক্রমানুসারে কীভাবে তাদের সাজানোর পদ্ধতি রয়েছে এমন উত্থিত ক্রমে কোনও অ্যারে বাছাই করার কোনও সহজ উপায় আছে ?
অথবা আমাকে কী অলস হওয়া বন্ধ করতে হবে এবং নিজেই এটি করতে হবে: [
অ্যারে ক্লাসে আরোহী ক্রমানুসারে কীভাবে তাদের সাজানোর পদ্ধতি রয়েছে এমন উত্থিত ক্রমে কোনও অ্যারে বাছাই করার কোনও সহজ উপায় আছে ?
অথবা আমাকে কী অলস হওয়া বন্ধ করতে হবে এবং নিজেই এটি করতে হবে: [
উত্তর:
আপনি এটি সমস্ত ধরণের অবজেক্টগুলিকে বাছাই করতে ব্যবহার করতে পারেন
sort(T[] a, Comparator<? super T> c)
Arrays.sort(a, Collections.reverseOrder());
Arrays.sort()
আদি ক্রমকে ক্রমবর্ধমান ক্রমে বাছাই করতে সরাসরি ব্যবহার করা যায় না। যদি আপনি Arrays.sort()
বিপরীত তুলনামূলক দ্বারা সংজ্ঞায়িত করে পদ্ধতিটি কল করার চেষ্টা করেন তবে Collections.reverseOrder()
এটি ত্রুটিটি ছুঁড়ে দেবে
বাছাইয়ের জন্য উপযুক্ত পদ্ধতি খুঁজে পাওয়া যায় নি (int [], তুলনামূলক)
এটি পূর্ণসংখ্যার অ্যারের মতো 'অ্যারে অবজেক্টস' এর সাথে দুর্দান্ত কাজ করবে তবে প্রারম্ভিক অ্যারে যেমন ইনট অ্যারের সাথে কাজ করবে না।
একটি আদিম অ্যারেটিকে অবতরণ ক্রমে বাছাই করার একমাত্র উপায় হ'ল প্রথমে অ্যারেটিকে আরোহণের ক্রমে বাছাই করুন এবং তারপরে অ্যারেটি বিপরীতভাবে স্থির করুন। এটি দ্বি-মাত্রিক আদিম অ্যারেগুলির ক্ষেত্রেও সত্য।
Collections.reverseOrder(this)
একটি তালিকা জন্য
Collections.sort(list, Collections.reverseOrder());
একটি অ্যারের জন্য
Arrays.sort(array, Collections.reverseOrder());
আপনি এটি ব্যবহার করতে পারেন:
Arrays.sort(data, Collections.reverseOrder());
Collections.reverseOrder()
Comparator
বিপরীত প্রাকৃতিক ক্রম ব্যবহার করে একটি ফেরত দেয় । আপনি ব্যবহার করে আপনার নিজস্ব তুলক একটি উল্টানো সংস্করণ পেতে পারেন Collections.reverseOrder(myComparator)
।
Collections.sort()
একটি List
ইনপুট প্যারামিটার হিসাবে নেয় , অ্যারে নয়।
বিকল্প হতে পারে (সংখ্যার জন্য !!!)
আক্ষরিকভাবে বলা:
array = -Arrays.sort(-array)
Integer.MIN_VALUE
(অথবা যেটা আদিম ব্যবহার করা হয়)। sort()
তারপরে আরও ভাল হবে তবে reverse()
তারা নিজেকে বিপরীত করতে হবে, কারণ তারা Arrays.reverse()
বাস্তবায়ন যোগ করেনি didn't
জাভা 8:
Arrays.sort(list, comparator.reversed());
আপডেট:
reversed()
নির্দিষ্ট তুলনামূলক বিপরীত। সাধারণত, তুলনাকারীরা আরোহণের অর্ডার দেয়, সুতরাং এটি ক্রমকে নীচে নামার ক্ষেত্রে পরিবর্তন করে।
অ্যারেতে আদিম উপাদান রয়েছে এমন অ্যারেগুলির org.apache.commons.lang(3)
বিপরীত করার সহজ উপায় থাকলে (এটিকে সাজানোর পরে) ব্যবহার করা হয়:
ArrayUtils.reverse(array);
Arrays.sort(primitives); ArrayUtils.reverse(primitives);
আদিম (যেমন int[] arr = {1, 2, 3};
) ব্যবহার করে একটি অ্যারের বিপরীত করা সরাসরি সম্ভব নয় Arrays.sort()
এবং Collections.reverseOrder()
কারণ এই পদ্ধতিগুলির Integer
জন্য আদিম প্রকারের ( int
) পরিবর্তে রেফারেন্স ধরণের ( ) প্রয়োজন হয় ।
তবে আমরা বিপরীত ক্রমে সাজানোর জন্য প্রথমে অ্যারে বাক্স করতে জাভা 8 স্ট্রিম ব্যবহার করতে পারি:
// an array of ints
int[] arr = {1, 2, 3, 4, 5, 6};
// an array of reverse sorted ints
int[] arrDesc = Arrays.stream(arr).boxed()
.sorted(Collections.reverseOrder())
.mapToInt(Integer::intValue)
.toArray();
System.out.println(Arrays.toString(arrDesc)); // outputs [6, 5, 4, 3, 2, 1]
আর একটি সমাধান হ'ল আপনি যদি এটির ব্যবহার করছেন তুলনামূলক ইন্টারফেসটি আপনি যে তুলনা করতে পারেন তুলনায় আপনার নির্ধারিত আউটপুট মানগুলি স্যুইচ করতে পারেন (অবজেক্ট বি-কম্পার্ড)।
উদাহরণ স্বরূপ :
public int compareTo(freq arg0)
{
int ret=0;
if(this.magnitude>arg0.magnitude)
ret= 1;
else if (this.magnitude==arg0.magnitude)
ret= 0;
else if (this.magnitude<arg0.magnitude)
ret= -1;
return ret;
}
কোথায় মাত্রার ডাটাটাইপ সঙ্গে একটি বৈশিষ্ট্য হল ডবল আমার প্রোগ্রামে। এটি আমার সংজ্ঞায়িত শ্রেণীর ফ্রিকিক্সটিকে তার প্রস্থের দ্বারা বিপরীত ক্রমে বাছাই করছিল । সুতরাং এটি সংশোধন করার জন্য, আপনি <
এবং দ্বারা ফিরে আসা মানগুলি স্যুইচ করুন >
। এটি আপনাকে নিম্নলিখিত দেয়:
public int compareTo(freq arg0)
{
int ret=0;
if(this.magnitude>arg0.magnitude)
ret= -1;
else if (this.magnitude==arg0.magnitude)
ret= 0;
else if (this.magnitude<arg0.magnitude)
ret= 1;
return ret;
}
এই তুলনাটি ব্যবহার করতে, আমরা কেবল কল করি Arrays.sort(mFreq)
যা আপনাকে সাজানো অ্যারে দেবেfreq [] mFreq
।
এই সমাধানটির সৌন্দর্য (আমার মতে) এটি হ'ল এটি ব্যবহারকারীর সংজ্ঞায়িত ক্লাসগুলি বাছাই করতে ব্যবহার করা যেতে পারে এবং নির্দিষ্ট বৈশিষ্ট্য অনুসারে এগুলি এর চেয়েও বেশি তাদের সাজানোর জন্য। যদি তুলনামূলক ইন্টারফেসের প্রয়োগটি আপনার কাছে ভয়ঙ্কর মনে হয় তবে আমি আপনাকে সেভাবে ভাবতে উত্সাহিত করব না, আসলে তা নয়। তুলনামূলক জিনিসগুলি কীভাবে বাস্তবায়িত করা যায় তার এই লিঙ্কটি আমার জন্য অনেক সহজ করে তুলেছে। প্রত্যাশাগুলি ব্যক্তিরা এই সমাধানটি ব্যবহার করতে পারেন এবং আপনার আনন্দটি আমার সাথেও তুলনীয় হবে ।
array.sort(function(a, b) {return b - a;}); //descending
অথবা
array.sort(function(a, b) {return a - b;}); //ascending
আমি জানি যে এটি বেশ পুরানো থ্রেড, তবে এখানে পূর্ণসংখ্যা এবং জাভা 8 এর জন্য একটি আপডেট সংস্করণ রয়েছে:
Arrays.sort(array, (o1, o2) -> o2 - o1);
নোট করুন যে এটি স্বাভাবিক ওঠার ক্রম (অথবা তুলনামূলক ডটকম্পারিং ইন্ট ()) এর জন্য "o1 - o2"।
এটি অন্য যে কোনও ধরণের অবজেক্টের জন্যও কাজ করে। বলুন,
Arrays.sort(array, (o1, o2) -> o2.getValue() - o1.getValue());
এটি আমার পক্ষে কাজ করেছে:
package doublearraysort;
import java.util.Arrays;
import java.util.Collections;
public class Gpa {
public static void main(String[] args) {
// initializing unsorted double array
Double[] dArr = new Double[] {
new Double(3.2),
new Double(1.2),
new Double(4.7),
new Double(3.3),
new Double(4.6),
};
// print all the elements available in list
for (double number : dArr) {
System.out.println("GPA = " + number);
}
// sorting the array
Arrays.sort(dArr, Collections.reverseOrder());
// print all the elements available in list again
System.out.println("The sorted GPA Scores are:");
for (double number : dArr) {
System.out.println("GPA = " + number);
}
}
}
আউটপুট:
GPA = 3.2
GPA = 1.2
GPA = 4.7
GPA = 3.3
GPA = 4.6
The sorted GPA Scores are:
GPA = 4.7
GPA = 4.6
GPA = 3.3
GPA = 3.2
GPA = 1.2
public double[] sortArrayAlgorithm(double[] array) { //sort in descending order
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
if (array[i] >= array[j]) {
double x = array[i];
array[i] = array[j];
array[j] = x;
}
}
}
return array;
}
কেবল সাজানোর জন্য দ্বিগুণ প্রকারের অ্যারে বাছাই করার জন্য এই পদ্ধতিটি ব্যবহার করুন, আপনি কেবল "রিটার্ন টাইপ", "আর্গুমেন্ট টাইপ" পরিবর্তন করে এবং অন্য কোনও ধরণের অ্যারে বাছাই করতে ব্যবহার করতে পারেন (যেমন int, ফ্লোট, এবং ইত্যাদি) ভেরিয়েবল "x" প্রকারটি সংশ্লিষ্ট প্রকারে প্রযোজ্য। অর্ডার আরোহণের জন্য আপনি যদি "> =" "<=" তে পরিবর্তন করতে পারেন তবে শর্তটি আরোহণ করুন।
আপনি Comparator.reverseOrder () এর সাথে স্ট্রিম অপারেশন ( কালেকশন.স্ট্রিম () ) ব্যবহার করতে পারেন ।
উদাহরণস্বরূপ, বলুন যে আপনার কাছে এই সংগ্রহ রয়েছে:
List<String> items = new ArrayList<>();
items.add("item01");
items.add("item02");
items.add("item03");
items.add("item04");
items.add("item04");
আইটেমগুলিকে তাদের "প্রাকৃতিক" ক্রমে মুদ্রণ করতে আপনি বাছাই করা () পদ্ধতিটি ব্যবহার করতে পারেন (বা এটি ছেড়ে দিয়ে একই ফলাফল পেতে পারেন):
items.stream()
.sorted()
.forEach(item -> System.out.println(item));
বা এটিকে অবতরণ (বিপরীত) ক্রমে মুদ্রণ করতে আপনি বাছাই করা পদ্ধতিটি তুলনামূলক গ্রহণ করতে পারেন এবং ক্রমটি বিপরীত করেছেন:
items.stream()
.sorted(Comparator.reverseOrder())
.forEach(item -> System.out.println(item));
নোট করুন এর জন্য তুলনামূলক (যেমন পূর্ণসংখ্যা, স্ট্রিং ইত্যাদি) প্রয়োগ করা দরকার implemented
এখানে প্রচুর গণ্ডগোল চলছে - লোকেরা আদিম মানগুলির সমাধানের পরামর্শ দেয়, স্থল থেকে কিছু বাছাইয়ের আলগোগুলি বাস্তবায়নের চেষ্টা করে, অতিরিক্ত গ্রন্থাগারগুলির সাথে জড়িত সমাধান দেয়, কিছু হ্যাকি দেখায় ইত্যাদি। মূল প্রশ্নের উত্তর 50 টি / 50। যারা কেবল অনুলিপি / পেস্ট করতে চান তাদের জন্য:
// our initial int[] array containing primitives
int[] arrOfPrimitives = new int[]{1,2,3,4,5,6};
// we have to convert it into array of Objects, using java's boxing
Integer[] arrOfObjects = new Integer[arrOfPrimitives.length];
for (int i = 0; i < arrOfPrimitives.length; i++)
arrOfObjects[i] = new Integer(arrOfPrimitives[i]);
// now when we have an array of Objects we can use that nice built-in method
Arrays.sort(arrOfObjects, Collections.reverseOrder());
arrOfObjects
হয় {6,5,4,3,2,1}
এখন। আপনার যদি ইনট ব্যতীত অন্য কিছুর একটি অ্যারে থাকে - এর পরিবর্তে সংশ্লিষ্ট অবজেক্টটি ব্যবহার করুন Integer
।
উপরের আলোচনার জন্য, এখানে আদি ক্রমকে সাজানোর জন্য সহজ উদাহরণ।
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] nums = { 5, 4, 1, 2, 9, 7, 3, 8, 6, 0 };
Arrays.sort(nums);
// reverse the array, just like dumping the array!
// swap(1st, 1st-last) <= 1st: 0, 1st-last: nums.length - 1
// swap(2nd, 2nd-last) <= 2nd: i++, 2nd-last: j--
// swap(3rd, 3rd-last) <= 3rd: i++, 3rd-last: j--
//
for (int i = 0, j = nums.length - 1, tmp; i < j; i++, j--) {
tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
// dump the array (for Java 4/5/6/7/8/9)
for (int i = 0; i < nums.length; i++) {
System.out.println("nums[" + i + "] = " + nums[i]);
}
}
}
আউটপুট:
nums[0] = 9
nums[1] = 8
nums[2] = 7
nums[3] = 6
nums[4] = 5
nums[5] = 4
nums[6] = 3
nums[7] = 2
nums[8] = 1
nums[9] = 0
একটি int অ্যারে অবতরণ সাজানোর সহজ পদ্ধতি:
private static int[] descendingArray(int[] array) {
Arrays.sort(array);
int[] descArray = new int[array.length];
for(int i=0; i<array.length; i++) {
descArray[i] = array[(array.length-1)-i];
}
return descArray;
}