PDA

View Full Version : سوال: مقایسه آیتمهای دو لیست باکس و برگرداندن آیتمهای غیر همسان



dr_ghezavat
سه شنبه 17 شهریور 1388, 17:01 عصر
سلام . خسته نباشید . میخوام آیتمهای دو تا لیست باکس رو با هم مقایسه کنم و در صورتی که ایتمهای لیست باکس اولی و دومی در مواردی متفاوت بودن یا آیتمی کم و زیاد بود ، اون آیتمها رو در بیاره . ترتیب مهم نیست و قرار نیست تریبشون مثل هم باشه . محتویات لیست اول باید در لیست دوم باشه نبود ، با یه مسیج باکس نمایش بده . چیکار باید بکنم ؟

محمد سلیم آبادی
سه شنبه 17 شهریور 1388, 17:41 عصر
یک راه این است که کار را به SQL Server بسپارید یعنی item های دو لیست را در دو جدول درج کنید سپس با استفاده از عملگر های جبری/مجموعه ای یا با استفاده از عملگر merge در SQL Server 2008 این کار را انجام دهید.
(برای اطلاعات بیشتر یک تاپیک در تالار SQL ایجاد کنید)

dr_ghezavat
چهارشنبه 18 شهریور 1388, 04:30 صبح
آخه برنامه به دیتابیس تقریبا مربوط نیست و همه چی سرپایی میخوام باشه .

Amir Oveisi
چهارشنبه 18 شهریور 1388, 04:41 صبح
در یک پست مشابه هم چنین مشکلی بود.
از HashSet و یا LINQ میتونین استفاده کنین اگر نمیخواین خودتون دستی این کار رو انچام بدین.

موفق باشید

Salar Ashgi
چهارشنبه 18 شهریور 1388, 08:20 صبح
سلام ، اگه تعداد آیتم های دو لیست باکس با هم برابر باشند :



int n = listBox1.Items.Count;//listbox2.items.count is also = n
string str="";
for (int i = 0; i < n; i++)
{
if (listBox1.Items[i].ToString() == listBox2.Items[i].ToString())
continue;
else
str += listBox1.Items[i].ToString() + " , " + listBox2.Items[i].ToString() + "\n";
}
MessageBox.Show(str);


http://salarcpp.persiangig.com/listbox.jpg

*) اگر تعداد آیتم ها برابر هم نباشند ، باز میشه با حلقه اینکارو انجام داد ولی با یکسری تغییرات !

موفق و پیروز باشید !!!

dr_ghezavat
چهارشنبه 18 شهریور 1388, 08:37 صبح
ممنون از همه . سالار اینو انجام میدم فکر کنم خودشه . میتونم برای برابر شدنشون خودم مقادیری به صورت خودکار اضافه کنم که بشه از این کد استفاده کرد. اگر پیشنهاد دیگه ای هم بود استقبال میکنم .

dr_ghezavat
چهارشنبه 18 شهریور 1388, 19:16 عصر
سلام ، اگه تعداد آیتم های دو لیست باکس با هم برابر باشند :



int n = listBox1.Items.Count;//listbox2.items.count is also = n
string str="";
for (int i = 0; i < n; i++)
{
if (listBox1.Items[i].ToString() == listBox2.Items[i].ToString())
continue;
else
str += listBox1.Items[i].ToString() + " , " + listBox2.Items[i].ToString() + "\n";
}
MessageBox.Show(str);


*) اگر تعداد آیتم ها برابر هم نباشند ، باز میشه با حلقه اینکارو انجام داد ولی با یکسری تغییرات !

موفق و پیروز باشید !!!
کد ترتیبی عمل میکنه سالار. یعنی اعضای متناظر رو مقایسه میکنه . من میخوام عضو آ از لیست اول رو با هر عضو از لیست دوم مقایسه کنه .

farhaneh
پنج شنبه 19 شهریور 1388, 00:23 صبح
کد ترتیبی عمل میکنه سالار. یعنی اعضای متناظر رو مقایسه میکنه . من میخوام عضو آ از لیست اول رو با هر عضو از لیست دوم مقایسه کنه .
خب دوست من میتونی تو کد بالا با یه سری تغییرات مثل اضافه کردن حلقه for each برای بررسی لیست دوم این کارو انجام بدی. (منظورم اینه که دو تا حلقه داشته باشی)
موفق باشی و پیروز.

Salar Ashgi
پنج شنبه 19 شهریور 1388, 09:46 صبح
کد ترتیبی عمل میکنه سالار. یعنی اعضای متناظر رو مقایسه میکنه . من میخوام عضو آ از لیست اول رو با هر عضو از لیست دوم مقایسه کنه .

با یک تغییر جزیی میشه اینکارو انجام داد :



string str = "";
int n = listBox1.Items.Count;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (listBox1.Items[i].ToString() == listBox2.Items[j].ToString())
continue;
else
str += listBox1.Items[i].ToString() + " , " + listBox2.Items[j].ToString() + "\n";
}
}
MessageBox.Show(str);


http://salarcpp.persiangig.com/list2.jpg

موفق و پیروز باشید !!!

dr_ghezavat
جمعه 20 شهریور 1388, 02:06 صبح
بازم نشد . ببینید این کد منه . میخوام کد مورد نظر یه چیزی شبیه این باشه ولی خطی که قرمز نوشته شده رو نمیدونم به جاش چی بنویسم که خطا نده اینو نوشتم که منظورمو برسونم :


private void button2_Click(object sender, EventArgs e)
{
int subscribersCount=listBox1.Items.Count;
int subscribtionCount = listBox2.Items.Count;
string blackList;
for (int subscriberIndex = 0;
subscriberIndex < subscribersCount;
subscriberIndex++)
{
string[] subscriberName =listBox1.Items[subscriberIndex].ToString();
foreach (string moshtarakName in subscriberName)
{
for (int subscribtionIndex = 0;
subscribtionIndex < subscribtionCount;
subscribtionIndex++)
{
if (moshtarakName == listBox2.Items[subscribtionIndex].ToString())
continue;
else
blackList += moshtarakName;
}
}
}
MessageBox.Show(blackList + "کسانی هستند که در حال حاضر شما مشترکشان نیستید");


}





من کد شمارو به این صورت تغییر دادم ولی نتیجه شد تصویر :


int subscribersCount = listBox1.Items.Count;

string str = "";
for (int i = 0; i < subscribersCount; i++)
{
for (int j = 0; j < subscribersCount; j++)
{
if (listBox1.Items[i].ToString() == listBox2.Items[j].ToString())
continue;
else
str += listBox1.Items[i].ToString()+ "\n";
}
}
MessageBox.Show(str);


http://sites.google.com/site/ghezavatfiles/_/rsrc/1252620111735/bi-mozu/untitled.JPG

dr_ghezavat
جمعه 20 شهریور 1388, 02:23 صبح
در واقع میخوام نتیجه این باشه:

http://sites.google.com/site/ghezavatfiles/_/rsrc/1252621286575/bi-mozu/untitled2.JPG

Salar Ashgi
جمعه 20 شهریور 1388, 15:20 عصر
دوست عزیز ، کاش از اول همین عکس رو میذاشتی ، تا موضوع روشنتر بشه ، با این حال من

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

کد مورد نظر :



string str="";
bool res=true;
foreach (object obj in listBox1.Items)
{
foreach (object obj2 in listBox2.Items)
{
if (obj.ToString() == obj2.ToString())
{
res = false;
break;
}
}
if (res)
{
str += obj.ToString() + "\n";
}
}
MessageBox.Show(str);


موفق و پیروز باشید !!!

dr_ghezavat
جمعه 20 شهریور 1388, 21:31 عصر
مثه اینکه این مشکل حل بشو نیست . آقا من وقتی آیتمهای جدیدی به لیستباکس اضافه میکنم و دوباره تست میکنم اطلاعاتی که نشون میده بروز نیست . یعنی باز همون میلاد و حسن رو نشون میده .

dr_ghezavat
یک شنبه 22 شهریور 1388, 02:31 صبح
من خودم هم دارم تلاش میکنم ولی هنوز مشغولم حلقه هارو گز میکنم و به نتیجه ای نرسیدم .

dr_ghezavat
یک شنبه 22 شهریور 1388, 02:52 صبح
یافتم یافتم !!!!!




for (int i= 0; i< listBox1.Items.Count; i++)
{
for (int j = 0; j < listBox2.Items.Count; j++)
{
if (listBox1.Items[i].ToString() ==listBox2.Items[j].ToString() )
{
break;
}
else
if ((j == listBox2.Items.Count - 1)&&(listBox1.Items[i].ToString() != listBox2.Items[j].ToString()))
{
if (listBox1.Items[i].ToString() != listBox1.Items[j].ToString())
blackList += listBox1.Items[i].ToString() + "\n";
}
}
}




http://sites.google.com/site/ghezavatfiles/_/rsrc/1252795847085/bi-mozu/untitled.JPG

nasimplus
جمعه 12 تیر 1394, 15:32 عصر
یک non generic collection میخواستم
که هم int و هم string رو ذخیره کنه.

ساختارش چه شکلی هست؟



Non-Generic
ArrayList
Hashtable
SortedList
Queue
Stack
IEnumerable
IList
CollectionBase
ReadOnlyCollectionBase




لینک هایی هم پیدا کردم اما متوجه نشدم.
http://blogs.msdn.com/b/kcwalina/archive/2005/09/23/collections.aspx
https://msdn.microsoft.com/en-us/library/ms379564.aspx
http://www.csharp-station.com/Tutorial/CSharp/Lesson20
https://www.simple-talk.com/blogs/2011/10/21/some-non-generic-collections/

این موارد زیر رو سرچ کردم متاسفانه مثالی پیدا نکردم.
non generic collection in C#‎‎
stack non generic collection in C#‎‎ with example
Queue non generic collection in C#‎‎ with example
Hashtable non generic collection in C#‎‎ with example


یک مثال میخوام که شبیه این:
Stack myStack = new Stack();
myStack.Push("Hello");
myStack.Push("World");
myStack.Push("!");
اما 2 یا چند نوع داده را ذخیره کنه نه فقط مثلا int


ساختار یک non generic collection چه شکلی هست؟