سلام
چطور میتونم آرایه ای را در زیر برنامه تعریف کنم که در تمان برنامه قابل دسترس باشد ؟(global)
سلام
چطور میتونم آرایه ای را در زیر برنامه تعریف کنم که در تمان برنامه قابل دسترس باشد ؟(global)
سلام
آرایه ای که داخل یک متد تعریف می شه فقط داخل همون متد قابل دستیبابی است.
خوب چکار کنم که بیرون متد هم بشه استفاده کرد ؟
خوب مشکل من اینجاست که ابعاد اولیه برای آرایه ندارم و در یکی از متدها این ابعاد حساب میشه و می خواهم آنجا این آرایه یه جورایی ابعادش مشخص بشه
در vb.net وقتی آرایه ای را بدون ابعاد در ابتدا تعریف می کنیم می توان با دستور redim دوباره ابعاد را مشخص کرد ، در اینجا چگونه است ؟
کسی نیست راهنمایی کنه ؟
سلام
از جنریک استفاده کن و Static هم باشد :
public class MyClass
{
public static List<int> a =new List<int>();
}
حالا هم پویا است و هم سراسری
باید از متد Array.CreateInstance استفاده کنی:
using System;
public class SamplesArray {
public static void Main() {
// Creates and initializes a multidimensional Array of type String.
int[] myLengthsArray = new int[2] { 3, 5 };
int[] myBoundsArray = new int[2] { 2, 3 };
Array myArray=Array.CreateInstance( typeof(String), myLengthsArray, myBoundsArray );
for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
for ( int j = myArray.GetLowerBound(1); j <= myArray.GetUpperBound(1); j++ ) {
int[] myIndicesArray = new int[2] { i, j };
myArray.SetValue( Convert.ToString(i) + j, myIndicesArray );
}
// Displays the lower bounds and the upper bounds of each dimension.
Console.WriteLine( "Bounds:\tLower\tUpper" );
for ( int i = 0; i < myArray.Rank; i++ )
Console.WriteLine( "{0}:\t{1}\t{2}", i, myArray.GetLowerBound(i), myArray.GetUpperBound(i) );
// Displays the values of the Array.
Console.WriteLine( "The Array contains the following values:" );
PrintValues( myArray );
}
public static void PrintValues( Array myArr ) {
System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
int i = 0;
int cols = myArr.GetLength( myArr.Rank - 1 );
while ( myEnumerator.MoveNext() ) {
if ( i < cols ) {
i++;
} else {
Console.WriteLine();
i = 1;
}
Console.Write( "\t{0}", myEnumerator.Current );
}
Console.WriteLine();
}
}
/*
This code produces the following output.
Bounds: Lower Upper
0: 2 4
1: 3 7
The Array contains the following values:
23 24 25 26 27
33 34 35 36 37
43 44 45 46 47
*/
البته در کد شما myArray قبلاٌ باید به طور سراسری تعریف بشه. این متد طول هر بعد رو به عنوان یک آرایه و اندیس های شروع رو هم به عنوان یک آرایه می گیره و آرایه رو ایجاد می کنه:
http://msdn.microsoft.com/en-us/library/x836773a.aspx
شما به تعداد ابعادت باید آرایه ای رو که طول هر بعد رو پر می کنه رو مقدار دهی کنی مثلاً:
3 بعدی: 3 مقدار در آرایه
4 بعدی چهار مقدار در آریه ....
کد بالا ایجاد 2 بعدی بود این سه بعدی است:
int[] myLengthsArray = new int[3] { 3, 7, 5 }; int[] myBoundsArray = new int[3] { 2, 1,3 };
Array myArray=Array.CreateInstance( typeof(String), myLengthsArray, myBoundsArray );
یعنی آرایه ای که طول بعد اولش 3 دوم 7 و سوم 5 است و اندیس شروعشان به ترتیب 2، 1 و 3 است. که شما برای سهولت همان 0 قرار دهید. تعداد عناصر هر دو آرایه myLengthsArray و myBoundsArray باید برابر باشد.
سلام دوستان
من چنین چیزی رو در ابتدای برنامه تعریف می کنم
string[] Words_Of_Original;
و در یکی از متدها از کد زیر استفاده می کنم
string[] Words_Of_Original = txt_Orig.Text.Split(new char[] { ' ', '\n' });
و برنامه درست کار می کند ولی در متد های دیگر مقادیر آرایه دیده نمی شود
چه کار باید بکنم ؟
سلام دوستمون راست میگه چرا از List ها استفاده نمی کنی ... بیرون متدت یه لیست به شکل زیر تعریف کن :
List<string> List_Words = new List<string>();
بعد تو متدت خروجی تابع Split رو تو این لیست بریز ... حالا تو هر متدی می تونی سایز لیستت رو فراخونی کنی . تغییر بدی یا مثل آرایه به محتویاتش دسترسی داشته باشی و ...
List_Words.AddRange(txt_Orig.Text.Split(new char[] { ' ', '\n' }));
توابع خیلی بیشتری هم نسبت به آرایه برای لیست تعریف شده .. خودت میتونی ببینی
خوب دوست عزیز اگر از این روش استفاده کنم چطور می تونم به خانه مثلاً شماره 6 لیست دسترسی داشته باشم و مقدار آنرا عوض کنم؟
مثلا برای کد زیر چگونه در لیست پیاده سازی شود ؟
if (Words_Of_Original[all_word_count - 1] == " ") {
Words_Of_Original[all_word_count - 1] = ".";
}
که Words_Of_Original یک آرایه است
ببین تو چرا نمی گی که هدف کلیت چیه؟
بگو می خوای دقیقاً چی کاری کنی تا بهترین راه رو بچه ها بگن.
آخرین ویرایش به وسیله sirvan-me : دوشنبه 26 تیر 1391 در 16:29 عصر
من الان دقیقاً برنامم را تشریح می کنم
در برنامه یک textbox وجود داره که کاربر درون آن متن فارسی تایپ می کنه ( جمله که با نقطه از هم جدا میشوند ) حالا اهداف من در زیر آمده :
ادغام چند جمله به اختیار کاربر ( بدین صورت که در برنامه کاربر عدد می دهد و به تعداد اون اعداد ، جملات با هم ادغام می شوند یعنی نقاط انتهایی هر جمله تا رسیدن به تعداد مطلوب حذف می شود )
مثلاً کل متن ما 8 جمله دارد و کاربر عدد 2 را وارد می کند پس یکی در میان باید نقاط پیدا شده و حذف شوند
برای این کار من گفتم آرایه ای تعریف کنم که کل متن را بصورت کلمه به کلمه در خود نگه دارد و سپس از ابتدا جستجو شود و وقتی به کاراکتر نقطه رسد یک شمارنده را افزایش داده و و باقیمانده تقسیم شمارندخ بر عدد ورودی کاربر اگر صفر شد نقطه رو بیخیال میشه و در غیر اینصورت نقطه را با فضای خالی پر می کنه
حالا مشکل من اینجاست که در ابتدا ابعاد آرایه را ندارم و پس از ورود متن ابعاد مشخص میشود و من این آرایه را در تمام متد ها و زیربرنامه ها لازم دارم .
وقتی از list استفاده می کنم نمی تونم یک خانه بخصوصش را پاک کنم و آرایه با طول متغییر هم مثل vb.net ندارد که با دستور redim بتوانم ابعاد آرایه را مشخص کنم .
لطفاً من را راهنمایی بفرمایید
شما برای اینکه بتونی یکی از خونه های لیست رو پاک کنی :وقتی از list استفاده می کنم نمی تونم یک خانه بخصوصش را پاک کنم و آرایه با طول متغییر هم مثل vb.net ندارد که با دستور redim بتوانم ابعاد آرایه را مشخص کنم .
1 ) اگر بر حسب مقدار خونه بخوای اون رو پاک کنی از کد زیر استفاده کن :
List_Words.Remove("Word");
2 ) اگر بر حسب اندیس خونه می خوای خونه ای از لیست رو پاک کنی از کد زیر استفاده کن :
List_Words.RemoveAt(9);
3 ) اگر می خوای همه ی خونه هایی که حاوی یه مقدار خاصن پاک کنی هم از کد زیر استفاده کن :
List_Words.RemoveAll(str => str == "Word");
فقط لیست رو به صورت سراسری تعریف میکنیList<string> sentences = new List<string>();میتونی کل محتوای لیست رو پاک کنیsentences.Clear();به این صورت هم میتونی مقداردهی کنی(با توجه به توضیحاتت)sentences = textBox1.Text.Split('.').Where(s => s != "" && s != null).ToList();به اینصورت هم میتونی یک خانه رو حذف کنیsentences.RemoveAt(اندیس);
دوستان يه سوال
وقتي محتواي يك خانه را پاك كردم ، مي خواهم محتواي داخلش فضاي خالي باشد (" ") آيا با پاك كردن مقدار داخلش كلاً آن خانه پاك نمي شود ؟
اگر از تابع های Remove استفاده کنی ، کلا اطلاعات اون خونه حذف میشه . باید مقدار اون خونه رو set کنی .
با remove اون خانه از لیست حذف میشه. میتونی با اندیس مقدار تهی رو ست کنیدsentences[اندیس] = "";
من خودم کدی رو که بهتون دادم تست کردم . اصلا خطا نمیده .
اینم برنامه ای که توش کدی که بهت دادم نوشتم ( یذره کاملتر )
richTextBox1.Text = richTextBox1.Text.Replace(textBox1.Text.Trim(), "").Replace(" ", " ").Trim();
برای اینکه فاصله های اضافی اول و آخر هم برداره تو قسمت Event کلیک Button2 کد بالا رو به جای قبلی بزن .
آخرین ویرایش به وسیله sirvan-me : سه شنبه 09 دی 1393 در 19:44 عصر
من که نفهمیدم مشکل من تو چیه ولی کد شما رو که کپی کردم کار کرد