PDA

View Full Version : مرتب کردن (sort) listbox بر اساس تعداد کلمات



dele_ghamgin_2008
پنج شنبه 24 مهر 1393, 01:19 صبح
سلام . من لیست باکسی دارم که توش چندین آیتم هست. مثل زیر :


قیمت زعفران ایران در دبی
مراکز زعفران
زعفران
خرید زعفران
صادرات زعفران نگین درجه یک
قیمت زعفران سرگل
قیمت روز زعفران سحرخیز


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



زعفران
خرید زعفران
مراکز زعفران
قیمت زعفران سرگل
قیمت روز زعفران سحرخیز
قیمت زعفران ایران در دبی
صادرات زعفران نگین درجه یک



یه کار دیگه هم میخوام . اینکه روی باتن دیگری کلیک کردم ، فقط آیتم هایی که بیش از 4 کلمه هستند باقی بمونند. یعنی آیتم هایی که از 1 و 2 و 3 کلمه تشکه شده اند، حذف بشوند.

ممنون می شوم کمک کنید.

aminmousavi
پنج شنبه 24 مهر 1393, 05:31 صبح
سلام دوست عزیز .
سوال اول :

for (int i = 0; i < listBox1.Items.Count; i++)
{
int min = i;
for (int j = i; j < listBox1.Items.Count; j++)
{
if (listBox1.Items[min].ToString().Length > listBox1.Items[j].ToString().Length)
{
min = j;
}
}
listBox1.Items.Insert(i, listBox1.Items[min].ToString());
listBox1.Items.RemoveAt((min + 1));


}


سوال دوم :

for (int i = listBox1.Items.Count-1; i >= 0; i--)
{
string[] words=listBox1.Items[i].ToString().Split(' ');
if (words.Length<=3)
{
listBox1.Items.RemoveAt(i);
}
}

dele_ghamgin_2008
پنج شنبه 24 مهر 1393, 13:31 عصر
سلام دوست عزیز .
سوال اول :

for (int i = 0; i < listBox1.Items.Count; i++)
{
int min = i;
for (int j = i; j < listBox1.Items.Count; j++)
{
if (listBox1.Items[min].ToString().Length > listBox1.Items[j].ToString().Length)
{
min = j;
}
}
listBox1.Items.Insert(i, listBox1.Items[min].ToString());
listBox1.Items.RemoveAt((min + 1));


}


سوال دوم :

for (int i = listBox1.Items.Count-1; i >= 0; i--)
{
string[] words=listBox1.Items[i].ToString().Split(' ');
if (words.Length<=3)
{
listBox1.Items.RemoveAt(i);
}
}


سلام . پاسخ سوال اول کاملاً صحبح بود ولی چرا من وقتی لیست باکس رو سورت میکنم ، دیگه این دستور شما کار نمی کنه ؟
LstAll.Sorted = true;


پاسخ سوال 2 کاملاً صحیح بود . متشکرم.

مهرداد صفا
پنج شنبه 24 مهر 1393, 13:41 عصر
سلام.
با فرض اینکه source مجموعه اطلاعات شماست، تقریبا:


//1:
listBox1.DataSource=source.OrderBy(i=> i.ToString().Split(" ").Count()).ToList();
//2:
listbox1.DataSource=source.Where(i=> i.ToString().Split(" ").Count()==4).ToList();

dele_ghamgin_2008
پنج شنبه 24 مهر 1393, 13:47 عصر
سلام.
با فرض اینکه source مجموعه اطلاعات شماست، تقریبا:


//1:
listBox1.DataSource=source.OrderBy(i=> i.ToString().Split(" ").Count()).ToList();
//2:
listbox1.DataSource=source.Where(i=> i.ToString().Split(" ").Count()==4).ToList();

مهندس چجوری باید بهش بفهمونم که source مجموعه اطلاعات منه ؟

مهرداد صفا
پنج شنبه 24 مهر 1393, 14:00 عصر
مهندس چجوری باید بهش بفهمونم که source مجموعه اطلاعات منه ؟

خودتون به جای source مجموعه اطلاعاتی رو که داخل لیست نمایش میدید قرار بدید.
یا:


//0:
var source =listBox1.Items.Cast<Object>().ToList();

dele_ghamgin_2008
پنج شنبه 24 مهر 1393, 16:18 عصر
خودتون به جای source مجموعه اطلاعاتی رو که داخل لیست نمایش میدید قرار بدید.
یا:


//0:
var source =listBox1.Items.Cast<Object>().ToList();

listBox1.DataSource=source.OrderBy(i=> i.ToString().Split(" ").Count()).ToList();
توی کد بالا i => i. رو ارور میگیره. میگه i چیه ؟

مهرداد صفا
جمعه 25 مهر 1393, 12:25 عصر
listBox1.DataSource=source.OrderBy(i=> i.ToString().Split(" ").Count()).ToList();
توی کد بالا i => i. رو ارور میگیره. میگه i چیه ؟
سلام.
خدمتشون بفرمایید باید VS نسخه 2008 و بالاتر باشی (C#‎‎ 3.5 or higher required).
فضای نام System.Linq باید import شده باشه.
با عرض پوزش کد هم کمی نیاز به ویرایش و تغییر داشت:


listBox1.DataSource = source.OrderByDescending(i => i.ToString().Split(' ').Count()).ToList();

موفق باشید.

dele_ghamgin_2008
شنبه 26 مهر 1393, 08:50 صبح
سلام.
خدمتشون بفرمایید باید VS نسخه 2008 و بالاتر باشی (C#‎‎‎‎‎‎ 3.5 or higher required).
فضای نام System.Linq باید import شده باشه.
با عرض پوزش کد هم کمی نیاز به ویرایش و تغییر داشت:


listBox1.DataSource = source.OrderByDescending(i => i.ToString().Split(' ').Count()).ToList();

موفق باشید.

سلام . مرسی درست شد ولی این کد به درستی کار نکرد : (تعداد 2 کلمه ای هم دوباره برام آورد توی لیست)


var source = LstAll.Items.Cast<Object>().ToList();
LstAll.DataSource = source.OrderByDescending(i => i.ToString().Split(' ').Count()==4).ToList();

مهرداد صفا
شنبه 26 مهر 1393, 16:54 عصر
سلام . مرسی درست شد ولی این کد به درستی کار نکرد : (تعداد 2 کلمه ای هم دوباره برام آورد توی لیست)


var source = LstAll.Items.Cast<Object>().ToList();
LstAll.DataSource = source.OrderByDescending(i => i.ToString().Split(' ').Count()==4).ToList();

سلام خواهش می کنم.
این کد برای sort کردن بود.

dele_ghamgin_2008
شنبه 26 مهر 1393, 20:16 عصر
سلام خواهش می کنم.
این کد برای sort کردن بود.

پس این کد برای چی بود ؟ شما دوتا کد به من دادید :

listBox1.DataSource=source.OrderBy(i=> i.ToString().Split(" ").Count()).ToList();