PDA

View Full Version : حرفه ای: Sort کردن آرایه String



mehdi8
سه شنبه 10 فروردین 1395, 07:32 صبح
سلام دوستان به فرض مثال من یه آرایه string دارم با این محتوا :

reza:30
mehdi:10
hamid:20

چطور میتونم این آرایه رو براساس اعداد بعد کاراکتر ":" یعنی همان 10, 20, 30 ها از کوچک به بزرگ مرتب کنم و در آخر به این صورت دربیاد :

mehdi:10
hamid:20
reza:30

ممنون.

shahryars
سه شنبه 10 فروردین 1395, 08:16 صبح
سلام دوستان من یه آرایه string دارم با این محتوا :

reza:30
mehdi:10
hamid:20

چطور میتونم این آرایه رو براساس اعداد بعد کاراکتر ":" یعنی همان 10, 20, 30, 40 ها از کوچک به بزرگ مرتب کنم و در آخر به این صورت دربیاد :

mehdi:10
hamid:20
reza:30

ممنون.

فقط همین 3تا؟
یا اضافه میشه بهشون؟
اگه اره، همه دو رقمی اند؟

mehdi8
سه شنبه 10 فروردین 1395, 09:14 صبح
فقط همین 3تا؟
یا اضافه میشه بهشون؟
اگه اره، همه دو رقمی اند؟

خیر ممکنه هر تعدادی باشه و عدد ها هم هر عددی میتوند باشن.اون مورد رو مثال زدم.
ممنون لطفا کمک کنید:لبخندساده:

shahryars
سه شنبه 10 فروردین 1395, 10:24 صبح
http://www.aparat.com/v/9fpKE/%D8%AC%D8%AF%D8%A7_%D8%B3%D8%A7%D8%B2%DB%8C_%D8%A7 %D8%B9%D8%AF%D8%A7%D8%AF_%D8%A7%D8%B2_%D8%B1%D8%B4 %D8%AA%D9%87_string_%D8%AF%D8%B1_%D8%B3%DB%8C_%D8% B3%D8%A7%D8%B1%D9%BE_%23c

این لینک رو برسی کنید.

mehdi8
سه شنبه 10 فروردین 1395, 10:29 صبح
http://www.aparat.com/v/9fpKE/%D8%AC%D8%AF%D8%A7_%D8%B3%D8%A7%D8%B2%DB%8C_%D8%A7 %D8%B9%D8%AF%D8%A7%D8%AF_%D8%A7%D8%B2_%D8%B1%D8%B4 %D8%AA%D9%87_string_%D8%AF%D8%B1_%D8%B3%DB%8C_%D8% B3%D8%A7%D8%B1%D9%BE_%23c

این لینک رو برسی کنید.


میدونم چطور باید split کرد یک متن رو اما مشکل من Sort کردن یک آرایه string هستش همونطور که در پست اول گفتم ( بر اساس اعداد موجود در هر المنت )

shahryars
سه شنبه 10 فروردین 1395, 10:54 صبح
یک سورس گزاشتم
اونو دریاب به جوابت انشالاه میرسی139772

mehdi8
سه شنبه 10 فروردین 1395, 11:07 صبح
یک سورس گزاشتم
اونو دریاب به جوابت انشالاه میرسی139772

دوست عزیز این برنامه میاد یه آرایه int رو مرتب میکنه اما من در پست اول هم گفته بودم اولا آرایه من از نوع string بوده و اعداد به صورت string هستن دوما همراه عدد ها یک یا چند کاراکتر متغیر هست که میشه اون ها با split جدا کرده و به اعداد رسید. و
و گرنه اگه ارایه int باشه با این کد به راحتی میشه آرایه رو مرتب کرد : Array.Sort(myArray);

Mahmoud.Afrad
سه شنبه 10 فروردین 1395, 11:22 صبح
از overload دیگر متد Sort استفاده کنید و یک comparer مناسب بنویسید
https://msdn.microsoft.com/en-us/library/aw9s5t8f.aspx

fakhradin
سه شنبه 10 فروردین 1395, 11:51 صبح
سلام دوستان به فرض مثال من یه آرایه string دارم با این محتوا :

reza:30
mehdi:10
hamid:20
چطور میتونم این آرایه رو براساس اعداد بعد کاراکتر ":" یعنی همان 10, 20, 30 ها از کوچک به بزرگ مرتب کنم و در آخر به این صورت دربیاد :

mehdi:10
hamid:20
reza:30

ممنون.

با سلام با اجازه اساتید بزرگوار سایت
شما معمولا برای مرتب سازی فقط کافیه یکی از روش های مرتب سازی رو مد نظر قرار بدید
مثل کد زیر با استفاده از روس مرتب سازی حبابی انجام شده است



for (int i = 0; i < arrayOrginal.Count; i++)
{
string min = arrayOrginal[i];
string[] split1 = min.Split(':');
int key1 = Convert.ToInt32(split1[1].Trim());
int index = i;
for (int j = 0; j < arrayOrginal.Count; j++)
{
string[] split2 = arrayOrginal[j].Split(':');
int key2 = Convert.ToInt32(split2[1].Trim());
if (key2 > key1)
{
key1 = key2;
min = arrayOrginal[j];
index = j;
}
}
if (i != index)
{
string temp = arrayOrginal[i];
arrayOrginal[i] = arrayOrginal[index];
arrayOrginal[index] = temp;
}
}

و اگر نیاز به برنامه کاملش داشتی یک پی ام به میلم بده تا اونم هم برات ارسال کنم

mehdi8
سه شنبه 10 فروردین 1395, 12:04 عصر
با سلام با اجازه اساتید بزرگوار سایت
شما معمولا برای مرتب سازی فقط کافیه یکی از روش های مرتب سازی رو مد نظر قرار بدید
مثل کد زیر با استفاده از روس مرتب سازی حبابی انجام شده است



for (int i = 0; i < arrayOrginal.Count; i++)
{
string min = arrayOrginal[i];
string[] split1 = min.Split(':');
int key1 = Convert.ToInt32(split1[1].Trim());
int index = i;
for (int j = 0; j < arrayOrginal.Count; j++)
{
string[] split2 = arrayOrginal[j].Split(':');
int key2 = Convert.ToInt32(split2[1].Trim());
if (key2 > key1)
{
key1 = key2;
min = arrayOrginal[j];
index = j;
}
}
if (i != index)
{
string temp = arrayOrginal[i];
arrayOrginal[i] = arrayOrginal[index];
arrayOrginal[index] = temp;
}
}

و اگر نیاز به برنامه کاملش داشتی یک پی ام به میلم بده تا اونم هم برات ارسال کنم

خیلی ممنون اما وقتی کد رو اضافه میکنم این ارور هارو میده : ( نام آرایه string[] هم cp میباشد )

139773


اگه سورس این کد رو پیوست کنید ممنون میشم. :بوس:

mehdi8
سه شنبه 10 فروردین 1395, 12:16 عصر
خیلی ممنون اما وقتی کد رو اضافه میکنم این ارور هارو میده : ( نام آرایه string[] هم cp میباشد )

139773


اگه سورس این کد رو پیوست کنید ممنون میشم. :بوس:

ممنون مشکلم حل شد :لبخند: ( خط اول رو پاک کردم و به جای Count هم lenght گذاشتم:لبخندساده: )

باز هم ممنون بشدت به این کد نیاز داشتم.

Mahmoud.Afrad
سه شنبه 10 فروردین 1395, 16:53 عصر
چون به جواب رسیدید من هم کد راهنمایی ای که در چند پست قبل داشتم رو میزارم برای کسانی که نیاز دارند
یک کلاس که اینترفیس IComparer<string> را پیاده میکنه را ایجاد و در پیاده سازی متد Compare در این کلاس، عددهای درون رشته را بدست آورده و نتیجه مقایسه را بازگشت میدهیم.

public class MyConvertor : IComparer<string>
{
public int Compare(string x, string y)
{
int a = 0, b = 0;
if (!string.IsNullOrEmpty(x))
{
string[] xStrings = x.Split(':');
if (xStrings.Length > 1)
{
int.TryParse(xStrings[1], out a);
}
}
if (!string.IsNullOrEmpty(y))
{
string[] yStrings = y.Split(':');
if (yStrings.Length > 1)
{
int.TryParse(yStrings[1], out b);
}
}

return a.CompareTo(b);
}
}
کافیه به صورت زیر آرایه رو مرتب کنیم

string[] strArray = {"a:15", "b:10", "c:5"};
Array.Sort(strArray, new MyConvertor());