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();
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.