الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف عمل Sort لبيانات مثل هذه داخل ArrayList

بدأه شاب مسلم في 21 فبراير 2010 · 15 رد · 1,453 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

لدينا ArrayList

 myAL.Add("ID_1&12.35")

 myAL.Add("ID_2&10.05")


 myAL.Add("ID_3&6.65")

كل وحده داخل الايري لست تحمل عنصران

رقم الشخص ID_1

وقيمة النقاط الحاصل عليها 2.35

وبينهما فاصل عن طريق &

المطلوب هو ترتيب هذا الايري لست ؛ الترتيب لابد ان يكون مبنى على اساس النقاط الحاصل عليها هذا الشخص

كيف ممكن ان نعمل ترتيب سريع لهذا الايري لست

ابحث عن طريقه مثل

BinarySearch

ودمتم بخير

تم تعديل هذه المشاركة بواسطة شاب مسلم في 21 فبراير 2010 في 10:25

#2

من اﻷفضل عمل فئة خاصة بالنقاط، عندها سيسهل ترتيبها باستعمال Collections.sort

يجب أن تعمل هذه الفئة implement لل interface Comparable وتعمل override للطريقة compareTo

public class Mark implements Comparable<Mark> {
	String id;
	float mark;

	public Mark (String id, float mark) {
		this.id = id;
		this.mark = mark;
	}

	public int compareTo(Mark m) {
		if (mark == m.mark) {
			return 0;
		} else if (mark < m.mark) {
			return -1;
		} else {
			return 1;
		}
	}

	public String toString() {
		return id + ": " + mark;
	}
}

import java.util.ArrayList;
import java.util.Collections;

public class Test {
	public static void main(String[] args) {
		ArrayList<Mark> list = new ArrayList<Mark>();
		list.add(new Mark("ID_1", 12.35f));
		list.add(new Mark("ID_2", 10.05f));
		list.add(new Mark("ID_3", 6.65f));
		System.out.println(list);	//prints [ID_1: 12.35, ID_2: 10.05, ID_3: 6.65]
		Collections.sort(list);
		System.out.println(list);	//prints [ID_3: 6.65, ID_2: 10.05, ID_1: 12.35]
	}
}
4
#3

اخي الكريم بارك الله فيك على هذه المساعده الواضحه

ولكن هناك مشكله

اريد ان تعود النتيجه كما كانت وبنفس الهيئة

وايضا اريد ان يكون الترتيب الكبير في البدايه

بمعنى

ID_1 &12.35,

ID_2 & 6.05,

ID_3 & 6. 04

اي يكون التسلسل ثم عللامة & ثم النقاط الحاصل عليها

ويكون الشخص الحاصل على نقاط اكثر هو الاول

ولكن الاهم ان يكون هذا كله داخل ArrayList

حاولت في كودك الذي وضعته ان ادخل الناتج في ArrayList فلم استطيع

ولم استطيع حتى ان اضعهم في سترنج

اتمنى ان يكون كلامي واضح ودمتم بخير

وبارك الله فيك

#4
public class Mark implements Comparable<Mark> {
	String id;
	float mark;

	public Mark (String id, float mark) {
		this.id = id;
		this.mark = mark;
	}

	public int compareTo(Mark m) {
		if (mark == m.mark) {
			return 0;
		} else if (mark < m.mark) {
			return 1;
		} else {
			return -1;
		}
	}

	public String toString() {
		return id + "&" + mark;
	}
}

import java.util.ArrayList;
import java.util.Collections;

public class Test {
	public static void main(String[] args) {
		ArrayList<Mark> list = new ArrayList<Mark>();
		list.add(new Mark("ID_1", 6.65f));
		list.add(new Mark("ID_2", 12.35f));
		list.add(new Mark("ID_3", 10.05f));
		System.out.println(list); 	//prints [ID_1&6.65, ID_2&12.35, ID_3&10.05]
		Collections.sort(list);
		System.out.println(list); 	//prints [ID_2&12.35, ID_3&10.05, ID_1&6.65]
	}
}

تم تعديل هذه المشاركة بواسطة herch في 22 فبراير 2010 في 18:43

1
#5
I am not sure if we can have something like this

	 public class Sort implements Comparable<Sort> {
	        String id;
	        float mark;




	        public Sort (String id, float mark) {
	                this.id = id;
	                this.mark = mark;
	        }

	        public int compareTo(Sort m) {
	                if (mark == m.mark) {
	                        return 0;
	                } else if (mark < m.mark) {
	                        return -1;
	                } else {
	                        return 1;
	                }
	        }

	        public String toString() {
	                return id + ": " + mark;
	        }
	}

		public ArrayList <String> sortTheArrayList (ArrayList <String> counted)
	    {


			ArrayList<Sort> list = new ArrayList<Sort>();

			for(int i=0;i<counted.size() ;i++)
		     {
				String[] firstIndex = counted.get(i).split("&");

				 double secondRow  = Double.parseDouble (firstIndex[1]);
				 list.add(new Sort(firstIndex[0]+"",(float) secondRow ));

		     }

			 Collections.sort(list);
			 System.out.println(list);
			 ArrayList <String> result = new ArrayList<String>();

			 result = list;
			 return result;

	    }

how I can solve this 

	 result = list;
#6

any help guys

#7

أخي مشكلتك غير واضحة

يجب أن تفصل في المشكلة حتى تجد من يساعدك

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#8

اخي الكريم

اعتذر بدايه على عدم توضيحي للمشكله بشكل بسيط

المطلوب ان نعمل كلاس يقوم بعمل الترتيب لل ArrayList حسب البيانات الموجوده فيه

والتي هي

رقم الشخص ID_1

وقيمة النقاط الحاصل عليها 2.35

وبينهما فاصل عن طريق &

اي في كل خانه في الايري لست يكون لدينا

ID_2&10.05

بشرط ان يكون الترتيب حسب الخانه الثانيه

وهذا الكلاس يقبل ان يأخذ ايري لست ؛ ويعيد لنا ايري لست مترتب حسب الاعلى

بمعنى انه لو شخص حصل على 10 درجات يكون اللاول

والثاني حصل على 5 درجات

والثالث

4.5

وهكذا

فاتمنى ان يكون الايري لست المعاد لي بعد الترتيب يكون بنفس الصيفه ايضا

ID_2&10.05

هل وضح كلامي

ودمتم بخير

#9

أظن الرد الرابع في هذا الموضوع

ينطبق عليه ما تريده بالضبط

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#10
علاء الصالحي كتب:

أظن الرد الرابع في هذا الموضوع

ينطبق عليه ما تريده بالضبط

تحياتي

اخي الكريم الامر ليس كما تظن

المشكله ان الايري لست الذي يعود لي يكون النوع الخاص به Mark

ArrayList<Mark> list = new ArrayList<Mark>();

وانا اريد ان يكون النوع الخاص به سترينج

 ArrayList <String> result = new ArrayList<String>();

حاولت ان اعمل له كاستنج ولكن لم استطيع

Mark cannot be cast to java.util.Collection

هل من طريقه لتحويل الاوتبوت الخاص بالترتيب بعد ان يتم الى ايري لست من نوع سترينج كما كان

ودمتم بخير

تم تعديل هذه المشاركة بواسطة شاب مسلم في 26 فبراير 2010 في 23:45

#11

ممكن تقول بالضبط ما المشكل مع الحل الذي اقترحته سابقا؟؟

ولماذا تريد عمل cast ل Mark إلى Collection؟؟

1
#12
herch كتب:

ممكن تقول بالضبط ما المشكل مع الحل الذي اقترحته سابقا؟؟

ولماذا تريد عمل cast ل Mark إلى Collection؟؟

المشكله ان الايري لست الذي يعود لي يكون النوع الخاص به Mark

ArrayList<Mark> list = new ArrayList<Mark>();

وانا اريد ان يكون النوع الخاص به سترينج

 ArrayList <String> result = new ArrayList<String>();

حاولت ان اعمل له كاستنج ولكن لم استطيع

Mark cannot be cast to java.util.Collection

هل من طريقه لتحويل الاوتبوت الخاص بالترتيب بعد ان يتم الى ايري لست من نوع سترينج كما كان

ودمتم بخير

#13

هل من الضروري أن يكون ال ArrayList الناتج يحتوي على String أم أنك تريد ذلك فقط لتتمكن من طباعة محتواه؟؟

1
#14
herch كتب:

هل من الضروري أن يكون ال ArrayList الناتج يحتوي على String أم أنك تريد ذلك فقط لتتمكن من طباعة محتواه؟؟

انا لا اريد ان اطبع محتواه

انا احتاج الناتج لاتمام العمل بالنتائج في كلاسات اخرى

بمعنى ان الترتيب هو جزء صغير في كود يقوم بعمل اخر

تم تعديل هذه المشاركة بواسطة شاب مسلم في 26 فبراير 2010 في 23:51

#15

الفئة Mark تحتوي على الطريقة toString التي تحتوي على String representation للفئة، مثلا إذا كنت تريد استرجاع String لعنصر في ال arraylist، ما عليك إلا المناداة على toString

import java.util.ArrayList;
import java.util.Collections;

public class Test {
	public static void main(String[] args) {
		ArrayList<Mark> list = new ArrayList<Mark>();
		list.add(new Mark("ID_1", 6.65f));
		list.add(new Mark("ID_2", 12.35f));
		list.add(new Mark("ID_3", 10.05f));
		Collections.sort(list);
		////////////////////////
		String firstElement = list.get(0).toString();
		String secondElement = list.get(1).toString();
		String thirdElement = list.get(2).toString();
		////////////////////////
	}
}
1
#16
herch كتب:

الفئة Mark تحتوي على الطريقة toString التي تحتوي على String representation للفئة، مثلا إذا كنت تريد استرجاع String لعنصر في ال arraylist، ما عليك إلا المناداة على toString

import java.util.ArrayList;
import java.util.Collections;

public class Test {
	public static void main(String[] args) {
		ArrayList<Mark> list = new ArrayList<Mark>();
		list.add(new Mark("ID_1", 6.65f));
		list.add(new Mark("ID_2", 12.35f));
		list.add(new Mark("ID_3", 10.05f));
		Collections.sort(list);
		////////////////////////
		String firstElement = list.get(0).toString();
		String secondElement = list.get(1).toString();
		String thirdElement = list.get(2).toString();
		////////////////////////
	}
}

بارك الله فيك اخي الكريم

مع سهولة الحل الا انه لم يخطر ببالي

سبحان الله

المسلم قوي باخوانه ضعيف بنفسه

بارك الله فيك مرة اخرى

وكتبه الله في ميزان حسناتك

لك مني دعوة في السجود

والسلام عليكم ورحمة الله وبركاته

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…