PDA

View Full Version : سوال: نحوه مقایسه کردن دو List<>



m0rtezaaghili
چهارشنبه 07 اسفند 1392, 11:10 صبح
سلام دوستان.
امیدوارم حالتون خوب باشه. من میخوام این لیست هارو با هم مقایسه کنم. ممنون میشم راهنمایی کنید.




Console.WriteLine("Please enter the first path: \n");
string pathOne = Console.ReadLine();
Console.WriteLine("\nPlease enter the second path: \n");
string pathTwo = Console.ReadLine();


List<string> dir = Directory.GetDirectories(pathOne, "*", SearchOption.AllDirectories).ToList();
List<string> dirfiles = Directory.GetFiles(pathOne, "*", SearchOption.AllDirectories).ToList();
foreach (string s in dir)
Console.WriteLine(s);
foreach (string s in dirfiles)
Console.WriteLine(s);
Console.WriteLine("------------------\n------------------\n------------------\n------------------");
List<string> secondDir = Directory.GetDirectories(pathTwo, "*", SearchOption.AllDirectories).ToList();
List<string> secondDirFiles = Directory.GetFiles(pathTwo, "*", SearchOption.AllDirectories).ToList();
foreach (string s in secondDir)
Console.WriteLine(s);
foreach (string s in secondDirFiles)
Console.WriteLine(s);


if(dir.Equals(secondDir)){
Console.WriteLine("Two directories is Equal !");
}

amamam
چهارشنبه 07 اسفند 1392, 21:39 عصر
اگه می خوای ببینی که آیتم های دو تا لیستت با هم یکسان هستند( که در اینصورت حتما دو تا مسیر وارد شده یکی نیست) می تونی کد زیر رو استفاده کنی



if(dir.Count==secondDir.Count&& dir.Count== dir.Intersect(secondDir).Count()) {
Console.WriteLine("Two directories is Equal !");
}

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



if (dir.SequenceEqual((secondDir)))
Console.WriteLine("Two directories is Equal !");

m0rtezaaghili
پنج شنبه 08 اسفند 1392, 13:58 عصر
ممنون دوست عزیز.

نام مسیر رو میشه درست کرد ولی من با مقایسه اسم مسیر ها مشکل دارم.

یکم تغییر دادم ممنون میشم فقط واسه مقایسه اسم مسیر ها راهنمایی کنید.




using System;
using System.Text;
using System.IO;


namespace ConsoleApplication2
{
classProgram
{
static void Main(string[] args)
{
//شمارنده برای بدست اوردن تعداد پوشه ها و فایل ها
int c = 0;
int k = 0;
//لیست برای ذخیره محتویات مسیرها
List<string> pathOneListItems = new List<string>();
List<string> pathTwoListItems = new List<string>();
// آرایه برای یکی کردن دو لیست موجود برای هر مسیر
string[] pathOneItemsArray;
string[] pathTwoItemsArray;
//وارد کردن مسیر اول و بدست آوردن طول آن
Console.WriteLine("Please enter first Path: \n");
string pathOne = Console.ReadLine();
int pathOneLength = Convert.ToInt16(pathOne.Length);
//وارد کردن مسیر دوم و بدست آوردن طول آن
Console.WriteLine("\nPlease enter seconday path: \n");
string pathTwo = Console.ReadLine();
int pathTwoLength = Convert.ToInt16(pathTwo.Length);
//ذخیره لیست پوشه های مسیر اول در لیست اول، کم کردن آدرس دریافتی از مسیر و اضافه کردن شمارنده
string[] dirOne = Directory.GetDirectories(pathOne, "*", SearchOption.AllDirectories);
for (int i = 0; i < dirOne.Length; i++)
{
Console.WriteLine(dirOne[i].Remove(0, pathOneLength+1));
pathOneListItems.Add(dirOne[i]);
//myArr.Add(dirOne);
C++‎‎;
}
//ذخیره لیست فایل های مسیر اول در لیست اول، کم کردن آدرس دریافتی از مسیر و اضافه کردن شمارنده
string[] dirOneFiles = Directory.GetFiles(pathOne, "*", SearchOption.AllDirectories);
for (int i = 0; i < dirOne.Length; i++)
{
Console.WriteLine(dirOneFiles[i].Remove(0, pathOneLength+1));
pathOneListItems.Add(dirOneFiles[i]);
C++‎‎;
}
//ریخت کل محتویات مسیر اول در آرایه
pathOneItemsArray = pathOneListItems.ToArray();
//ذخیره لیست پوشه های مسیر دوم در لیست دوم، کم کردن آدرس دریافتی از مسیر و اضافه کردن شمارنده
string[] dirTwo = Directory.GetDirectories(pathTwo, "*", SearchOption.AllDirectories);
for (int i = 0; i < dirTwo.Length; i++)
{
Console.WriteLine(dirTwo[i].Remove(0, pathTwoLength+1));
pathTwoListItems.Add(dirTwo[i]);
k++;
}
//ذخیره لیست فایل های مسیر دوم در لیست دوم، کم کردن آدرس دریافتی از مسیر و اضافه کردن شمارنده
string[] dirTwoFiles = Directory.GetFiles(pathTwo, "*", SearchOption.AllDirectories);
for (int i = 0; i < dirTwo.Length; i++)
{
Console.WriteLine(dirTwoFiles[i].Remove(0, pathTwoLength+1));
pathTwoListItems.Add(dirTwoFiles[i]);
k++;
}
//ریخت کل محتویات مسیر دوم در آرایه
pathTwoItemsArray = pathTwoListItems.ToArray();
//مرتب کردن آرایه ها
Array.Sort(pathOneItemsArray);
Array.Sort(pathTwoItemsArray);
//شرط اول: تعداد فایل ها و فولدرها یکی است ؟؟
if (c==k)
{
//شرط : اگر نام فایل ها یکی بود
for (int i = 0; i < c; i++)
{
//if (string.Compare(pathItemOne[i], pathItemTwo[i], true) == 0)
//if (pathItemOne[i].Equals(pathItemTwo[i])
if (pathOneItemsArray[i] == pathTwoItemsArray[i])
{
Console.WriteLine("Mosavi ast.");
}
else
{
Console.WriteLine("mosavi nist.");
}
}
}
//اگر تعداد فایل ها و فولدرها یکی نبود
else
{
Console.WriteLine("2 masir yeki nistan.");
}

Console.ReadKey();
}
}
}