PDA

View Full Version : یافتن مقادیر تکراری در لیست باکس



dele_ghamgin_2008
سه شنبه 15 مهر 1393, 13:26 عصر
سلام . می خواهم رنامه ای بسازم که مقادیر تکراری رو از لیست باکس 1 پیدا کنه و آن مقادری رو در لیست باکس 2 کپی کنه . یعنی توی لیست باکس 2 بگه که این آیتم ها در لیست 1 تکرار شده اند . مثال :

لیست باکس 1 :

علی
احمد
رضا
علی
حامد

لیست باکس 2 :

علی

یعنی لیست باکس 2 فقط مقادیر تکرار شده در لیست باکس 1 را نمایش دهد . دستور زیر ، مقادیر تکراری رو حذف می کند از لیست باکس . من نمی خواهم حذف شود . فقط می خواهم پیدا کند و در لیست باکس 2 نمایش دهد/
//حذف تکراری ها از لیست کل var uniqueItems = LstAll.Items.Cast<string>().Distinct().ToList();
LstAll.DataSource = null;
LstAll.Items.Clear();
LstAll.Items.AddRange(uniqueItems.ToArray());
uniqueItems.Clear();
uniqueItems = null;

parvizwpf
سه شنبه 15 مهر 1393, 18:47 عصر
خب شما چرا دارید نال میکنید لست آل رو؟ نیازی نیست. با خط اول که جواب رو گرفتید حالا فقط اینها رو اد رنج کنید به لیست دوم.

مهرداد صفا
سه شنبه 15 مهر 1393, 22:20 عصر
سلام.
می تونید با استفاده از متود Count آیتمهایی که تعداد بیشتر از یک دارند رو انتخاب کنید. شبیه به این :


var all =listbox1.Items.Cast<Object>().ToList;
listbox2.DataSource=all.Where(i=> all.Count(i) >1).ToList();

dele_ghamgin_2008
پنج شنبه 17 مهر 1393, 01:34 صبح
خب شما چرا دارید نال میکنید لست آل رو؟ نیازی نیست. با خط اول که جواب رو گرفتید حالا فقط اینها رو اد رنج کنید به لیست دوم.

به این صورت هم نوشتم باز نشد :

var uniqueItems = LstAll.Items.Cast<string>().Distinct().ToList();
lstOne.Items.AddRange(uniqueItems.ToArray());

dele_ghamgin_2008
پنج شنبه 17 مهر 1393, 01:36 صبح
سلام.
می تونید با استفاده از متود Count آیتمهایی که تعداد بیشتر از یک دارند رو انتخاب کنید. شبیه به این :


var all =listbox1.Items.Cast<Object>().ToList;
listbox2.DataSource=all.Where(i=> all.Count(i) >1).ToList();

وقتی دستور شما رو می نویسم ارور می دهد . متن ارور :


Error 1 Cannot assign method group to an implicitly-typed local variable

parvizwpf
پنج شنبه 17 مهر 1393, 09:43 صبح
var all = listBox1.Items.Cast<string>().ToList();
var find = all.GroupBy(x => x)
.Where(group => group.Count() > 1)
.Select(group => group.Key).Cast<string>().ToArray();

listBox2.Items.AddRange(find);

dele_ghamgin_2008
دوشنبه 21 مهر 1393, 17:20 عصر
var all = listBox1.Items.Cast<string>().ToList();
var find = all.GroupBy(x => x)
.Where(group => group.Count() > 1)
.Select(group => group.Key).Cast<string>().ToArray();

listBox2.Items.AddRange(find);


مهندس پاسخ شما کاملاً صحیح و درست بود .
آیا می توان فهمید که این مقادیر تکراری ، چندبار تکرار شده اند ؟ و در لیست باکس سومی ، تعداد هرکدام به ترتیب نمایش داده شود ؟
به عنوان مثال در لیست 2 یک مقدار پیدا شد و درج شد ، حالا بهم بگه این مقدار چندبار در لیست 1 وجود داشت ؟ مقدار تکرار رو در لیست 3 نمایش بدهد.

parvizwpf
دوشنبه 21 مهر 1393, 18:18 عصر
برای مثال در List box دیگری نشان دادم:

var findCount = all.GroupBy(x => x)
.Where(group => group.Count() > 1)
.Select(group=>group.Key+"-"+group.Count()).Cast<string>().ToArray();

listBox3.Items.AddRange(findCount);

dele_ghamgin_2008
سه شنبه 22 مهر 1393, 11:33 صبح
برای مثال در List box دیگری نشان دادم:

var findCount = all.GroupBy(x => x)
.Where(group => group.Count() > 1)
.Select(group=>group.Key+"-"+group.Count()).Cast<string>().ToArray();

listBox3.Items.AddRange(findCount);


پاسخ صحیح هست ولی این کد :
group.Key + "-" + group.Count()

میاد آیتم تکراری رو مینویسیه و خط تیره و تعدادش رو کنارش در یک لیست باکس میزنه . من میخواهم عنوان تکراری در لیست2 و تعداد تکرار همان عنوان در لیست 3 نمایش دهده شود . ممنون می شوم راهنمایی کنید.