PDA

View Full Version : سوال: نگهداری دو نوع متغیر در یک کالکشن



SardareEshgh
چهارشنبه 05 تیر 1398, 19:52 عصر
سلام
تعدادی پرسنل را در یک لیست دارم که ممکن است تکرار پذیر باشند و همچنین در لیست دیگری همین پرسنل شماره رده هم دارند که باز هم ممکن است این عدد تکرار پذیر باشد.

اسامی پرسنل و رده های مربوطه برای هر بخش در یک شیت اکسل قرار دارند اما چون بخشهای مختلفی خوانده میشود میخوام با تجمیع اسامی و شماره رده و سپس مرتب سازی بر اساس رده کمترین و بیشتری رده و پرسنل مربوطه به اون رده را استخراج کنم.

به دلیل تکرار پذیری عناصر از هاش تیبل و دیکشنری نمیشه استفاده کرد.
ممنون

ROSTAM2
پنج شنبه 06 تیر 1398, 08:42 صبح
سلام. بالاخره که کد پرسنلی تکراری نمی شه!

mmbguide
پنج شنبه 06 تیر 1398, 16:37 عصر
باید سازوکار برنامت رو بررسی کرد ولی شاید بشه کلکسیونی از اشیاء رو نگهداری کنی و در زمان مورد نیاز تبدیل انجام بدی.

SardareEshgh
پنج شنبه 06 تیر 1398, 21:23 عصر
سلام. کد پرسنلی در کار نیست. فقط اسم پرسنل و رده پرسنل و جنسیت مطرحه.

SardareEshgh
پنج شنبه 06 تیر 1398, 21:30 عصر
باید سازوکار برنامت رو بررسی کرد ولی شاید بشه کلکسیونی از اشیاء رو نگهداری کنی و در زمان مورد نیاز تبدیل انجام بدی.

مجبور شدم یه کلاس تعریف کنم و نام پرسنل و رده اونها رو توی کلاس بریزم و بعد در هاش تیبل نگهداری کنم.

class Person
{
public int Rank;
public string namefamily;
}


Hashtable people = new Hashtable();

for (int t = 1; t <= RV.EndRow; t++)
{
Personcount += t;
string name = WordSpel.TextSplit(((Range)RV.range_Nurse.Cells[t, 2]).Value2.ToString());

var Rank = ((Range)RV.range_Nurse.Cells[t, 4]).Value2;

int rank = 0;

if (Rank != null)//ستون گروه ارتقا و نام پرسنل

rank = metod.SetRank(Rank.ToString().Trim());

Person Person = new Person();
Person.Rank = rank;
Person.namefamily = name;
people.Add(Personcount, Person);

}


کلید اصلی هم شد شمارنده خود حلقه!
و مرتب سازی و بعد هم استخراج مینیمم و ماکزیمم :



// this is the original answer
var result = people.Cast<DictionaryEntry>().OrderBy(kvp => ((Person)kvp.Value).Rank);

// now convert it to an array
var listRank = result.ToArray();

for (int t = 0; t < listRank.Length; t++)

if (ListSheeft_Group.Contains(((Person)listRank[t].Value).namefamily))
{
nurse = ((Person)listRank[t].Value).namefamily;

break;
}