سلام.اگه مثلا آرايه اي به صورت زير داشته باشيم.
حالا اگه بخوام تمامي age هاي توي آرايه رو كه از نوع int هستند پيدا كنم و تو يك متغير خاص بريزم بايد چي كار كنم.Arraylist("name",age,"birthday")
ممنون
Printable View
سلام.اگه مثلا آرايه اي به صورت زير داشته باشيم.
حالا اگه بخوام تمامي age هاي توي آرايه رو كه از نوع int هستند پيدا كنم و تو يك متغير خاص بريزم بايد چي كار كنم.Arraylist("name",age,"birthday")
ممنون
سلام
منظور شما چندان مشخص نیست و کدتان هم بی معنی است و صحیح نیست...
اگر فرض کنیم یک ArrayList مخلوط دارید و میخواهید فقط Integre های آن را جدا کنید میتوانید از کدهای زیر استفاده کنید:
کد:Dim ar As New System.Collections.ArrayList()
ar.Add("Text")
ar.Add(2.35F)
ar.Add(123)
ar.Add(DateTime.Now)
ar.Add(77)
'VB2005/2008
Dim onlyint1 As New System.Collections.Generic.List(Of Integer)()
For Each obj As Object In ar
If (TypeOf obj Is Integer) Then
onlyint1.Add(DirectCast(obj, Integer))
End If
Next
'or ...
'VB2008-Framework3.0
Dim onlyint2 = From obj In ar Where TypeOf obj Is Integer
سلام مجدد
گمانم منظورتان #C بوده ... بحرحال این هم #C معادل کدهای فوق...
کد:System.Collections.ArrayList ar = new System.Collections.ArrayList();
ar.Add("Text");
ar.Add(2.35F);
ar.Add(123);
ar.Add(DateTime.Now);
ar.Add(77);
//C#2005/2008
System.Collections.Generic.List<int> onlyint1 = new System.Collections.Generic.List<int>();
foreach (object obj in ar)
{
if (obj is int)
onlyint1.Add((int)obj);
}
//or ...
//C#2008-Framework3.0
var onlyint2 = from object obj in ar where obj is int select obj;
ممنون.درسته سئوالم نامفهوم بود .ولي كد ننوشتم فقط مثال زدم كه آرايه اي دارم كه دائما مقادير (نام، سن،وتاريخ تولد) ميگيره
در واقع كل مطلب اينه كه من از اطلاعات آيتم هاي يك ليست باكس مقدار (نام، سن،وتاريخ تولد ) رو جدا مي كنم و در يك struct ميريزم و نهايتا همچين كاري ميكنم.
کد:myarraylist.Add(mystruct);
تا اينجا كه درسته؟
حالا مي خوام با همون حلقه foreach كه شما گفتي متغير سن رو از آرايه پيدا كنم و مجموعشو تو يك متغير sum بريزم و نهايتا ميانگين سن بگيرم.
ولي جواب نمي ده.
#c
سلام
اگر فرض کنیم یک struct دارید که شامل نام و سن و... است، طبیعتاً شما فقط باید فیلد مورد نظر را جمع کنید ...
ضمناً بهتر است به جای استفاده از collection های عادی بدون type مثل arraylist از مجموعه های نوع پذیر Generic استفاده کنید.
در نهایت باید یادآوری کنم که گرفتن و نگه داری "سن" چندان کار منطقی نیست، چون سن اصولاً عدد پایداری نیست و ارزش ذخیره سازی ندارد، به جای آن شما باید "تاریخ تولد" را گرفته و ذخیره کنید و بر اساس تاریخ تولد محاسبات خود را پی ریزی کنید، چون برخلاف سن، تاریخ تولد یک عدد ثابت و مشخص و پایدار است.کد:public struct Personal
{
public string Name;
public int Age;
}
//...
System.Collections.Generic.List<Personal> list = new System.Collections.Generic.List<Personal>();
Personal x = new Personal();
x.Age = 40;
list.Add(x);
x = new Personal();
x.Age = 5;
list.Add(x);
//C#2005/2008
int sum = 0;
foreach (Personal item in list)
{
sum += item.Age;
}
double average = (double)sum / list.Count;
//or ...
//C#2008-Framewok3
double average = list.Average(item => item.Age);
موفق باشید
سلام مجدد.
اگر بخوام در يك arraylist يا list كه با struct مقدار مي گيرن.(مثل مثال بالا) يك مقدار خاصي رو جستجو كنم.مثلا دنبال اسم hamid بگردم بايد چي كار كنم؟
با Array.Find هر كاري كردم نشد.
سلام
شما می تونید از query زیر استفاده کنید
یا با استفاده از همون حلقه ی foreachکد:
List<Personal> Personals = newList<Personal>();
//Add
//or
//remove from Personals
var ResultArray = from personal in Personals
where
personal.Name == "hamid"
select personal;
موفق باشید.کد:
List<Personal> ResultArray = newList<Personal>();
foreach (Personal p in Personals)
{
if (p.Name == "hamid") ResultArray.Add(p);
}
راحت تری از LINQ استفاده کنینقل قول:
کد:http://msdn.microsoft.com/en-us/library/bb397676.aspx
کد:
class LINQQueryExpressions
{
static void Main()
{
// Specify the data source.
int[] scores = new int[] { 97, 92, 81, 60 };
// Define the query expression.
IEnumerable<int> scoreQuery =
from score in scores
where score > 80
select score;
// Execute the query.
foreach (int i in scoreQuery)
{
Console.Write(i + " ");
}
}
}
// Output: 97 92 81
ممنون.بله اين راه ها جواب مي دن. ولي اينا يعني اينكه اينجا<>Array.Find, جواب نميده؟و فقط وقتي عناصر يك ليست معمولي هستند ( struct نيستند ) درست جواب مي ده؟
سلام
شما میتوانید به سادگی از Array.Find هم استفاده کنید، اگر دست استفاده کنید همواره جواب خواهد داد و محدودیت و شرطی خاص وجود ندارد...نقل قول:
ولي اينا يعني اينكه اينجا<>Array.Find, جواب نميده؟و فقط وقتي عناصر يك ليست معمولي هستند
اگر جچواب نگرفته اید حتماً جایی را اشتباه کرده اید.
فقط طبیعتاً ورودی شما باید آرایه (Array) باشد.
کد://C#.Net2008
public struct Personal
{
public string Name;
public int Age;
}
//...
Personal[] buffer = ... ;
Personal item = Array.Find<Personal>(buffer, i => (i.Name == "hamid"));
Personal[] items = Array.FindAll<Personal>(buffer, i => (i.Name == "hamid"));