با سلام
می دونم برای تعریف لیست از کد زیر استفاده می کنند ولی آیا می توان لیست 2 بعدی هم تعریف کرد ؟
List<int> list = new List<int>();
list.Add(2);
list.Add(3);
list.Add(5);
list.Add(7);
با سلام
می دونم برای تعریف لیست از کد زیر استفاده می کنند ولی آیا می توان لیست 2 بعدی هم تعریف کرد ؟
List<int> list = new List<int>();
list.Add(2);
list.Add(3);
list.Add(5);
list.Add(7);
برای حالت تو در تو میتونی از
List<List<int>> nest = newList<List<int>>();
استفاده کنی اما اگر منظورت چیزی مثل Key, Value است از Dictionary استفاده کن
Dictionary<int, string> dic = newDictionary<int, string>();
دووست عزیز در حقیقت من می خواهم یک آرایه دو بعدی در سیستم تعریف کنم که :
اولا در سراسر سیستم قابل استفاده باشد
ثانیا در ابتدا ابعادش معلوم نیست و در حین اجرا مشخص می شود
در اصل برنامه من به این صورت کار می کند که یک سری جمله از ورودی گرفته و کلمات را در هر جمله می شمارد و یک ماتریس ( آرایه دوبعدی ) خروجی م یدهد که سطرها معرف جملات و ستون ها معرف کلمات هستند
سلام
دوست من شما باید ابتدا با استفاده از متد strring.Split('.') که نقطه رو معیار اتمام جمله قرار می ده متن ورودی رو به چندین جمله تفکیک کنی. که این کار یه آرایه از جملات رو بهت میده بعد هر خونه از آرایه چون خودش رشته هست می تونه دوباره split(' ') بشه تا بتونی جمله رو به چندین کلمه خرد کنی. نیازی به دونستن از قبل طول آرایه نیست.
موردی که fjm11100 در 2# اشاره کردن، کاملاً این نیاز شما رو پوشش میده؛ شما کافیه یک Dictionary بصورت public static در کلاس اصلی پروژه تعریف کنید که اولین عضوش "معرف جملات" و دومین عضوش هم یک لیست "معرف کلمات" باشه، برای نمونه:
public static Dictionary<string, List<string>> global_terms =
new Dictionary<string, List<string>>();
private void test()
{
List<string> terms = new List<string>
{
"الا يا ايها الساقی ادر کاسا و ناولها",
"که عشق آسان نمود اول ولی افتاد مشکلها",
"به بوی نافهای کاخر صبا زان طره بگشايد",
"ز تاب جعد مشکينش چه خون افتاد در دلها",
"مرا در منزل جانان چه امن عيش چون هر دم",
"جرس فرياد میدارد که بربنديد محملها",
"به می سجاده رنگين کن گرت پير مغان گويد",
"که سالک بیخبر نبود ز راه و رسم منزلها",
"شب تاريک و بيم موج و گردابی چنين هايل",
"کجا دانند حال ما سبکباران ساحلها",
"همه کارم ز خود کامی به بدنامی کشيد آخر",
"نهان کی ماند آن رازی کز او سازند محفلها",
"حضوری گر همیخواهی از او غايب مشو حافظ",
"متی ما تلق من تهوی دع الدنيا و اهملها"
};
foreach (string item in terms)
global_terms.Add(item, item.Split(' ').ToList());
Console.WriteLine(global_terms);
}
مشخصاً شما بجای اون لیست terms، میتونید از ورودی، جملات خودتون رو بگیرید...
من اصلاً متوجه نشدم دقيقاً چي شد !!!
اينو مي دونم كه يك آرايه دارم ( از ورودي گرفتم ) كه يكسري كلمات داخلش هست و يك متن كه اون هم از ورودي گرفتم حالا مي خواهم تعداد تكرار هر كلمه را درون هر جمله ببينم چنتاست ؟
يعني تو C# آرايه دو بعدي وجود نداره كه بشه بصورت سراسري تعريف كرد و طولش را بعداً مشخص كرد ؟
نه، اگه منظورتون چیزی مثل memset یا malloc برای مثلاً [] *char که تو ++C/C داشتیم باشه، نه اینجا نداریم؛ تو #C همه چیز مدیریت شده است و اگه برنامهنویس native هستید و تازه اومدین تو دات نت باید به راههای دیگهای عادت کنید که من تو کد و توضیحات پست قبلی توضیح دادم.
به عنوان نمونه، تو دات نت بجای اونها از لیستهای جنریک استفاده میشه ...
اگه مشتاق تفاوتهای تعریف و معماری متغیرها و ... تو داتنت باشید، قبلاً در موردشون اینجا صحبت کردیم.
خوب دوست عزيز اگر ميشه كد قبلتون رو يكم واضحتر توضيح بدهيد ( من تازه شروع به كار با C# كردم )
مثلاً term در اينجا متن ورودي ما است كه شامل چندين جمله مي باشد كه با نقطه از هم جدا شدند ؟
پس كلمات كجا هستند كه بايد آنها را در متن پيدا كرده و شمارش كنيم ؟
"term در اينجا متن ورودي ما" نیست؛ terms (=جملات) همونطورکه از نامش پیداست، یک آرایه از جملات هست که با فرض اینکه شما میدونید List چی هست -پست اول خودتون- نوشتم، اگه یه متن طولانی دارید که جملاتاش با نقطه از هم جدا شده، همونطورکه tooraj_azizi_1035 اشاره کردن، با split کردنش میتونید به همین terms برسید؛ تو این مثال فرض شده اینکار قبلاً با یک خط کد انجام شده.
بقیه رو هم که اشاره کردم، تمام جملات و کلمات split شده درون همون "Dictionary که بصورت public static در کلاس اصلی پروژه تعریف" شده، قرار میگیرن، عضو اول میشه جمله شما و عضو دوم کلمات تفکیک شده اون جمله با delimiter فاصله (space)؛ دیگه نمیدونم چطور توضیح بدم، اگه بخواین اون جمله رو هم با نقطه split کنید میشه اینطوری (واسه هر خط هم کامنت گذاشتم):
string entry = "your entry. balh blah blah. blah1 blah1 blah1 . blah2 blah2. blah blah blah.....";
//Split entry tor term(s) with '.' delimiter
foreach (string term in entry.Split('.'))
// Check term doesn't empty
if (term.Trim().Length > 0)
// check term not exist before!
if (!global_terms.ContainsKey(term.Trim()))
//Split term to word(s) and fill
//Global dictionary's second member with word(s)
global_terms.Add(term.Trim(), term.Trim().Split(' ').ToList());
دوست عزیز قبل از هر چیز لازمه که ازت تشکر کنم بخاطر محبتی که داری و راهنمایی می کنی ولی این کدی که شما دارین به این صورت کار می کنه که تا نقطه تمام کلمات را می شمارد ( مثلاً اگر جمله " من من تو " باشد خروجی 3 دارد ) ولی من دقیقا می خواهم به من بگه 2 بار کلمه من و 1 بار کلمه تو آمده
در مثال زیر واضح تر می گم :
" من من تو . من تو . "
در جمله اول کلمه من 2 بار و کلمه تو 1 بار
در جمله دوم کلمه من 1 بار و کلمه تو 1 بار وجود دارد
ممنون میشم اگر بازهم من را راهنمایی بفرمایید
این کد چیزی رو نمیشماره! صورت سوال شما یه چیز دیگه بود:شمردن کلمات تکراری، کار اول ابتدایی هست؛ من لیست کلمات رو تهیه کردم، برای چیزی که میخواین، اگه linq نمیخواین بنوبسین، یه for بذارین، برای هر لیست count بگیره ......در حقیقت من می خواهم یک آرایه دو بعدی در سیستم تعریف کنم که :
اولا در سراسر سیستم قابل استفاده باشد
ثانیا در ابتدا ابعادش معلوم نیست و در حین اجرا مشخص می شود ...
چون احساس میکنم مشکل اصلی شما رفع شده، ادامه نمیدم!
موفق باشید./
دوست عزيز از نحو خطاب كردنتون ممنون ( کار اول ابتدایی هست )
من در پست هاي ديگر هم اين سوال را به نحوي مطرح كردم و گفتم كه من اين برنامه را بصورت تمام و كمال در vb.net نوشتم و حالا مي خواهم در C# پياده سازي كنم و نيز C# هم ياد بگيرم
در توضيحات نيز اين را بگويم كه من كلمات يكتا را در جمله پيدا مي كنم و نيز با ريختن كل متن درون يك آرايه بصورت كلمه به كلمه ، درون آن را براي كلمات جستجو كرده و تعداد تكرار كلمات را پيدا مي كنم ( به اين دليل از اين روش استفاده مي كنم چون برنامه يك ورودي داره كه اين قابليت را به كاربر مي ده تا با دادن عددي ، تعداد جملات را با هم ادغام كند )
ولي مشكل من اينجا بود كه وقتي كلمات را مي شمارم مي خواهم بگويم در فلان جمله ، فلان كلمه اين تعداد تكرار شده تا در جاهاي ديگر برنامه ( محاسبات كسينوسي ) از اين اعداد استفاده كنم و چيزي كه به ذهن من رسيد استفاده از آرايه دو بعدي بود ( كه در vb.net به راحتي پياده شد ) كه در ابتدا ابعادش معلوم نيست و با خواندن متن از ورودي اين ابعاد مشخص ميشه
من هنوز سوالم پا برجاست كه چطور اين كار ( با اين توصيف ) را انجام دهم ( تعريف آرايه دو بعدي )