PDA

View Full Version : سوال: مقایسه ی دو ArrayList



abizaki
سه شنبه 15 شهریور 1390, 14:42 عصر
بسم الله الرحمن الزحیم
سلام
دو تا ArrayList دارم. که هرچی در اولی هست، در دومی هم هست. منتهی دومی چند تا آیتم بیشتر داره. مثلا:
ArrayList 1 = 1 , 2 ,3 ,4
ArrayList 2 = 1,2,3,4,5,6,7,8,9
میخوام اعداد 5 تا9 (یعنی اونایی که تو اولی نیستن) برن تو ArrayList 3
چی کار باید بکنم؟

mehdi.mousavi
سه شنبه 15 شهریور 1390, 15:05 عصر
سلام.
می تونید بدین شکل عمل کنید:


ArrayList array1 = new ArrayList() { 1, 2, 3, 4 };
ArrayList array2 = new ArrayList() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

ArrayList newArray = new ArrayList(array2.Cast<int>().Except(array1.Cast<int>()).ToArray());


موفق باشید.

پاورقی: جای ArrayList از List های Generic استفاده کنید.

abizaki
سه شنبه 15 شهریور 1390, 15:11 عصر
بسم الله الرحمن الرحیم
سلام
دوتا هاشتیبل چی؟

abizaki
سه شنبه 15 شهریور 1390, 15:14 عصر
متدی به اسم Cast اصلا وجود نداره.
نسخه C# من 2010 هست با .NET 4

mehdi.mousavi
سه شنبه 15 شهریور 1390, 15:22 عصر
متدی به اسم Cast اصلا وجود نداره.
نسخه C# من 2010 هست با .NET 4

using System.Linq;

رو به لیست namespace ها اضافه کنید.

abizaki
سه شنبه 15 شهریور 1390, 16:21 عصر
چه ربطی داره؟
آرای لیست کلکسیونه. ربطی به Linq نداره که!!
اینم اضافه کردم. کار نکرد.

Salar Ashgi
سه شنبه 15 شهریور 1390, 16:34 عصر
ربطی به Linq نداره که
اتفاقا کاملا مرتبط هست چراکه اینها همگی Query های LINQ هستند .
در ضمن همانطور که جناب موسوی عزیز هم ذکر کردند ، بهتره از Generic Collections استفاده کنید بجای
استفاده از Array List (به خاطر مشکلات زیاد مدیریت لیست و بحث Boxing , UnBoxing)

یه مثال براتون میزنم با LINQ و Generic Collections :


List<int> list1 =new List<int>{ 1, 2, 3, 4 };
List<int> list2 =new List<int>{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
List<int> res = (from n in list2
where !list1.Contains(n)
select n).ToList<int>();

//string str = "";
//foreach (int i in res)
//{
// str += i.ToString() + "\n";

//}
//MessageBox.Show(str);

abizaki
سه شنبه 15 شهریور 1390, 16:41 عصر
Linq چیه؟
کاربردش چیه؟
Generic چیه؟
از C# کتاب آقای محمد هاشمیان رو خوندم. خیلی بیشتر نخوندم.

gwbasic
سه شنبه 15 شهریور 1390, 16:43 عصر
cast یه Extension method هست که در System.Core.dll قرار داره چک کن ببین تو رفرنس های پروژه هست یا نه که اصولا در پروژه های 3.5 یا 4 بطور اتوماتیک اضافه می شه

mehdi.mousavi
سه شنبه 15 شهریور 1390, 16:46 عصر
چه ربطی داره؟ آرای لیست کلکسیونه. ربطی به Linq نداره که!! اینم اضافه کردم. کار نکرد.

سلام.
آیا فایل System.Core.dll رو به لیست Reference های پروژه خودتون اضافه کرده اید؟
در C# قابلیتی داریم به اسم Extension Method. یک ArrayList اینترفیس IEnumerable رو Implement کرده، در نتیجه، قادره تا متود زیر رو فراخوانی کنه:

public static IEnumerable<TResult> Cast<TResult>(this IEnumerable source);

فقط کافیه تا Reference به System.Core.dll در پروژه اضافه شده باشه و Namespace مربوطه نیز درست آدرس شده باشه.
در چنین شرایطی، کلیه کلاس هایی که IEnumerable رو پیاده سازی کرده اند، متود جدیدی به اسم Cast خواهند داشت (و بسیاری از متودهای دیگه، از جمله Except).

موفق باشید.

@سالار اشگی: ممنونم از توضیحاتی که در مورد Boxing/Unboxing ارائه کردید.

abizaki
سه شنبه 15 شهریور 1390, 21:59 عصر
چند تا چیزو کلا نفهمیدم:
متد Extension چیه؟ چه فرقی با متد های دیگه داره؟
System.Core.dll به چه کاری میاد؟ چی تو خودش داره؟

یه مرجع فارسی برای اضافات .Net 3.5, 4 نسبت به .Net 2.0 اگه سراغ دارین معرفی می کنین؟