ขนาดอาร์เรย์ (ความยาว) ใน C #


101

ฉันจะกำหนดขนาดของอาร์เรย์ (ความยาว / จำนวนรายการ) ใน C # ได้อย่างไร


1
@Marcelo: ... แต่ก็ยังไม่สามารถตอบคำถามง่ายๆเช่น "แว่นตาของฉันอยู่ที่ไหน" ;)
Guffa

2
คุณหมายถึงอะไรกับ "ขนาด"? จำนวนองค์ประกอบหรือขนาดเป็นไบต์?
Fredrik Mörk

2
@fearofawhackplanet ฉันโหวตให้เพราะฉันมีปัญหาเดียวกันในการค้นหาความยาวใช้ไม่ได้กับอาร์เรย์หลายมิติและเป็นผลมาจากคำถามนี้ทำให้ค้นพบอันดับและ GetLength (ดัชนี)
TheMathemagician

1
@fearofawhackplanet ฉันเชื่อว่าการมียอดดู 145,000 ครั้งเป็นเครื่องพิสูจน์ถึงความเกี่ยวข้อง โหวตแล้ว
brycejl

คำตอบ:


154

ถ้าเป็นอาร์เรย์มิติaเดียว

a.Length

aจะทำให้จำนวนขององค์ประกอบของ

ถ้าbเป็นอาร์เรย์หลายมิติรูปสี่เหลี่ยมผืนผ้า (ตัวอย่างเช่นint[,] b = new int[3, 5];)

b.Rank

จะให้จำนวนมิติข้อมูล (2) และ

b.GetLength(dimensionIndex)

จะได้รับความยาวของมิติข้อมูลที่กำหนด (การสร้างดัชนีตาม 0 สำหรับมิติข้อมูล - ดังนั้นb.GetLength(0)คือ 3 และb.GetLength(1)5)

ดูเอกสาร System.Arrayสำหรับข้อมูลเพิ่มเติม

ดังที่ @Lucero ชี้ให้เห็นในความคิดเห็นมีแนวคิดเกี่ยวกับ "อาร์เรย์แบบหยัก" ซึ่งจริงๆแล้วไม่มีอะไรมากไปกว่าอาร์เรย์แบบมิติเดียวของอาร์เรย์ (โดยทั่วไปคือมิติเดียว)

ตัวอย่างเช่นอาจมีสิ่งต่อไปนี้:

int[][] c = new int[3][];
c[0] = new int[] {1, 2, 3};
c[1] = new int[] {3, 14};
c[2] = new int[] {1, 1, 2, 3, 5, 8, 13};

สังเกตว่าสมาชิกทั้ง 3 คนcมีความยาวต่างกัน ในกรณีนี้เป็นก่อนที่c.Lengthจะระบุจำนวนขององค์ประกอบของc(3) และc[0].Length, c[1].Lengthและc[2].Lengthจะเป็น 3, 2 และ 7 ตามลำดับ


1
เพื่อความสมบูรณ์คุณสามารถระบุวิธีการทำงานของอาร์เรย์ที่ขรุขระได้ (เช่นint[][]) ;-)
Lucero

ฉันคิดว่า @Lucerno แต่คิดว่ามันเป็นปัญหาที่แตกต่างออกไป - การหาขนาดของสิ่งต่างๆภายในอาร์เรย์ - อาร์เรย์ที่ขรุขระเป็นเพียงอาร์เรย์แบบมิติเดียวที่มีอาร์เรย์แบบมิติเดียวอย่างที่ฉันแน่ใจว่าคุณรู้ .
แบลร์คอนราด

3
แน่นอนฉันรู้ว่าคุณพูดถูกและนั่นคือเหตุผลที่ฉันเพิ่มความคิดเห็นด้วยรอยยิ้มแทนที่จะเขียนคำตอบด้วยตัวเอง อย่างไรก็ตามความแตกต่างระหว่าง[,]และ[][]ดูเหมือนจะไม่ชัดเจนสำหรับมือใหม่. NET ทุกคนดังนั้นจึงควรสังเกตว่า[][]ไม่ใช่อาร์เรย์หลายมิติในคำตอบของคุณ
Lucero

2
คำตอบที่ดี. แต่คุณอาจต้องการที่จะเปลี่ยนควรจะเป็นb.GetLength[0] is 3 and b.GetLength[1] is 5 b.GetLength(0) and b.GetLength(1)
Droogans

29

คุณสามารถดูเอกสารสำหรับ Arrayเพื่อหาคำตอบสำหรับคำถามนี้

ในกรณีนี้คุณอาจต้องการความยาว :

int sizeOfArray = array.Length;

แต่เนื่องจากนี่เป็นคำถามพื้นฐานและคุณไม่ต้องสงสัยเลยว่าจะมีคำถามแบบนี้อีกมากมายแทนที่จะบอกคำตอบกับคุณฉันควรจะบอกคุณว่าจะหาคำตอบได้อย่างไร

Visual Studio Intellisense

เมื่อคุณพิมพ์ชื่อของตัวแปรและกด.แป้นจะแสดงรายการวิธีการคุณสมบัติเหตุการณ์และอื่น ๆ ทั้งหมดที่มีอยู่ในออบเจ็กต์นั้น เมื่อคุณไฮไลต์สมาชิกมันจะให้คำอธิบายสั้น ๆ ว่ามันทำอะไร

กด F1

หากคุณพบวิธีการหรือคุณสมบัติที่อาจทำในสิ่งที่คุณต้องการ แต่ไม่แน่ใจคุณสามารถเลื่อนเคอร์เซอร์ไปไว้บนนั้นแล้วกด F1 เพื่อรับความช่วยเหลือ ที่นี่คุณจะได้รับคำอธิบายโดยละเอียดพร้อมลิงก์ไปยังข้อมูลที่เกี่ยวข้อง

ค้นหา

ข้อความค้นหาsize of array in C#มีลิงก์มากมายที่บอกคำตอบสำหรับคำถามของคุณและอื่น ๆ อีกมากมาย ทักษะที่สำคัญที่สุดอย่างหนึ่งที่โปรแกรมเมอร์ต้องเรียนรู้คือวิธีการค้นหาข้อมูล มักจะเร็วกว่าในการค้นหาคำตอบด้วยตัวเองโดยเฉพาะอย่างยิ่งหากมีการถามคำถามเดียวกันมาก่อน

ใช้บทช่วยสอน

หากคุณเพิ่งเริ่มเรียนรู้ C # คุณจะทำตามบทช่วยสอนได้ง่ายขึ้น ฉันสามารถแนะนำแบบฝึกหัด C #บน MSDN ได้ หากคุณต้องการหนังสือที่ผมอยากแนะนำEssential C #

Stack Overflow

หากคุณไม่สามารถหาคำตอบได้ด้วยตนเองโปรดโพสต์คำถามใน Stack Overflow แต่เราจะขอบคุณหากคุณแสดงให้เห็นว่าคุณได้ใช้ความพยายามในการค้นหาคำตอบด้วยตัวเองก่อน


3
เก่งมากพี่มาร์ค แต่อาจจะโอเว่อร์!
ยัน

1
@ นายาน: ขอบคุณ! แม้ว่า OP จะได้รับคำตอบอย่างรวดเร็วจากผู้โพสต์คนอื่น ๆ แต่ฉันรู้สึกว่าการสอนผู้เริ่มต้นหาข้อมูลเป็นเรื่องสำคัญมากกว่าที่จะสอนให้พวกเขาตอบคำถามเฉพาะ ฉันหวังว่า OP จะพบว่าคำตอบนี้มีประโยชน์และช่วยให้พวกเขาไม่ต้องถามคำถามหลายร้อยคำถามเพื่อให้พวกเขาพบคำตอบด้วยตัวเอง
Mark Byers

12
+1 ที่สละเวลาใช้แนวทางนี้ - "ให้ปลา ... " ฯลฯ
Peter Kelly

ถ้าฉันต้องทำแบบเดียวกันฉันจะเปลี่ยนเส้นทาง OPs ไปยังคำตอบของคุณที่นี่ =) และใช่ฉันเห็นด้วยกับคุณ!
ยัน

1
นี่เป็นสิ่งที่ดี แต่ฉันรู้สึกว่าควรจะเชื่อมโยงโดยอัตโนมัติ พวกเขาเริ่มหน้า "คำตอบที่น่าดู" ไม่ได้หรือ สิ่งหนึ่งที่ฉันจะเพิ่มก็คือควรตรวจสอบ stack overflow ก่อนโพสต์คำถาม บ่อยครั้งที่ฉันเริ่มโพสต์คำถามแล้วดูคำถามที่เกี่ยวข้องที่ป๊อปอัป ฉันไม่แน่ใจว่าคำตอบนั้นมีอยู่ที่อื่นบนอินเทอร์เน็ตหรือไม่หากคำตอบนั้นไม่ได้อยู่ที่นี่ด้วย
user420667

17

สำหรับอาร์เรย์ 1 มิติ

int[] listItems = new int[] {2,4,8};
int length = listItems.Length;

สำหรับอาร์เรย์หลายมิติ

int length = listItems.Rank;

เพื่อให้ได้ขนาด 1 มิติ

int length =  listItems.GetLength(0);

2
Rankคุณสมบัติไม่กลับจำนวนรายการที่จะส่งกลับจำนวนมิติ
Guffa

ฉันจะหาเอกสารสำหรับคุณสมบัติที่รองรับโดยอาร์เรย์ 1 มิติได้ที่ไหน (เช่นLength, Rank, GetLength)
มินห์ Tran



5

สำหรับอาร์เรย์มิติเดียวคุณใช้Lengthคุณสมบัติ:

int size = theArray.Length;

สำหรับอาร์เรย์หลายมิติLengthคุณสมบัติจะส่งกลับจำนวนรายการทั้งหมดในอาร์เรย์ คุณสามารถใช้GetLengthวิธีการรับขนาดของมิติใดมิติหนึ่ง:

int size0 = theArray.GetLength(0);

4

ในกรณีทั่วไปส่วนใหญ่จะใช้ "Length" และ "Count"

อาร์เรย์:

int[] myArray = new int[size];
int noOfElements = myArray.Length;

อาร์เรย์รายการที่พิมพ์:

List <int> myArray = new List<int>();
int noOfElements = myArray.Count;

1

มันจะเป็นแบบนี้: 1D:

 type[] name=new type[size]  //or =new type[]{.....elements...}

2 มิติ:

 type[][]name=new type[size][] //second brackets are emtpy

จากนั้นเมื่อคุณใช้อาร์เรย์นี้:

 name[i]=new type[size_of_sec.Dim]

หรือคุณสามารถประกาศบางอย่างเช่นเมทริกซ์

type[ , ] name=new type [size1,size2]

0

สิ่งที่พลาดไปคือสิ่งที่ฉันรู้สึกหงุดหงิดในทันใด:

ฉันจะทราบจำนวนรายการภายในอาร์เรย์ได้อย่างไร คือ.Lengthเท่ากับ.Countของรายการได้หรือไม่

คำตอบคือ: ปริมาณของรายการประเภท X ที่ได้รับการใส่ลงไปในอาร์เรย์ของ X ชนิดที่สร้างขึ้นด้วยการnew X[number] ที่คุณจะต้องดำเนินการด้วยตัวเอง !

เช่น. โดยใช้ตัวนับ: int countItemsInArray = 0และcountItemsInArray++สำหรับทุกการกำหนดอาร์เรย์ของคุณ

(อาร์เรย์เพียงแค่สร้างขึ้นด้วยnew X[number]มีพื้นที่ทั้งหมดของnumberรายการ (อ้างอิง) ประเภท X จัดสรรแล้วคุณสามารถกำหนดให้ภายในสถานที่ใด ๆ ในฐานะที่ได้รับมอบหมายเป็นครั้งแรกของคุณตัวอย่างเช่น (ถ้าnumber= 100 และชื่อตัวแปร = )aa[50] = new X();

ฉันไม่รู้ว่า C # ระบุค่าเริ่มต้นของแต่ละสถานที่ภายในอาร์เรย์เมื่อสร้างหรือไม่หากไม่ใช่หรือค่าเริ่มต้นที่คุณไม่สามารถเปรียบเทียบได้ (เพราะอาจเป็นค่าที่คุณใส่ไว้ในอาร์เรย์) คุณ จะต้องติดตามว่าสถานที่ใดในอาร์เรย์ที่คุณกำหนดไว้แล้วด้วยหากคุณไม่ได้กำหนดตามลำดับโดยเริ่มจาก0(ซึ่งในกรณีนี้สถานที่ทั้งหมดที่มีขนาดเล็กกว่าที่countItemsInArrayจะกำหนดให้)

ในขนาดคำถามของคุณของอาร์เรย์ (ความยาว / จำนวนรายการ)ขึ้นอยู่กับว่า/หมายถึงการยืนสำหรับ "ทางเลือก" หรือ "หารด้วย" หลังยังคงต้องครอบคลุม ("จำนวนรายการ" ที่ฉันให้เป็น " จำนวนรายการ "และอื่น ๆ ให้.Lengthซึ่งสอดคล้องกับมูลค่าnumberในรหัสของฉันด้านบน):

C # มีตัวsizeofดำเนินการ ( https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/sizeof ) ปลอดภัยที่จะใช้สำหรับประเภทบิวท์อิน (เช่น int) (และทำงานเฉพาะกับประเภท (ไม่ใช่ตัวแปร)) ดังนั้นขนาดของอาร์เรย์bชนิดไบต์จะเป็นintb.Length * sizeof(int)

(เนื่องจากพื้นที่ทั้งหมดของอาร์เรย์ได้รับการจัดสรรในการสร้างแล้วดังที่กล่าวไว้ข้างต้นและsizeofทำงานเฉพาะกับประเภทเท่านั้นจึงไม่มีรหัสใดที่ต้องการsizeof(variable)/sizeof(type)ทำงานหรือให้จำนวนรายการที่ไม่มีการติดตาม)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.