C # cinsinden Dizi Boyutu (Uzunluk)


99

C # 'da bir dizinin boyutunu (uzunluk / öğe sayısı) nasıl belirleyebilirim?


1
@Marcelo: ... ama yine de "Gözlüklerim nerede" gibi basit sorulara cevap veremiyor. ;)
Guffa

2
"Beden" ile ne demek istiyorsun? Bayt cinsinden öğe sayısı veya boyutu?
Fredrik Mörk

2
@fearofawhackplanet Uzunluk bulma konusunda aynı problemi yaşadığım için oy verdim, çok boyutlu diziler için işe yaramadı ve bu sorunun sonucu olarak Rank ve GetLength (indeks) keşfedildi.
TheMathemagician

1
@fearofawhackplanet 145.000 görüntülemeye sahip olmasının alaka düzeyinin bir kanıtı olduğuna inanıyorum. Olumlu oy verildi.
brycejl

Yanıtlar:


153

Tek boyutlu bir diziyse a,

a.Length

öğelerinin sayısını verecektir a.

Eğer bbir dikdörtgen, çok boyutlu bir dizi (örneğin, int[,] b = new int[3, 5];)

b.Rank

boyutların sayısını (2) verecek ve

b.GetLength(dimensionIndex)

herhangi bir boyutun uzunluğunu alır (boyutlar için 0 tabanlı dizine ekleme - b.GetLength(0)3 ve b.GetLength(1)5 de öyledir ).

Daha fazla bilgi için System.Array belgelerine bakın .

@Lucero'nun yorumlarda belirttiği gibi, gerçekten tek boyutlu (tipik olarak tek boyutlu) dizilerden başka bir şey olmayan bir "sivri uçlu dizi" kavramı vardır.

Örneğin, aşağıdakiler olabilir:

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};

cHer birinin 3 üyesinin farklı uzunluklara sahip olduğuna dikkat edin . Bu durumda, daha önce olduğu gibi c.Lengthelementlerin sayısını gösterir c, (3) ve c[0].Length, c[1].Lengthve c[2].Length3, 2 ve 7, sırası ile olur.


1
Tamlık için pürüzlü dizilerin çalışma şeklini de listeleyebilirsiniz (örn. int[][]) ;-)
Lucero

Şeylerin boyutunu endam - Ben, @Lucerno ama bunu farklı bir problemi düşündüm kabul içeride Eminim olarak bilirsiniz, pürüzlü dizinin gerçekten sadece tek boyutlu dizi saydı boyutlu diziler barındırıyorsa bu - Dizi .
Blair Conrad

3
Tabii ki haklı olduğunu biliyorum ve bu yüzden kendime cevap yazmak yerine yorumu gülen suratla ekledim. Ancak arasındaki ayrım [,]ve [][]hala değer belirterek olabilir, böylece tüm .NET başlayanlar için açık olmak görünmüyor [][]yanıtlarınız anlamda çok boyutlu dizi değil.
Lucero

2
İyi cevap. Ama, değiştirmek isteyebilirsiniz b.GetLength[0] is 3 and b.GetLength[1] is 5olmalıdır b.GetLength(0) and b.GetLength(1).
Droogans

29

Bu sorunun cevabını bulmak için Array belgelerine bakabilirsiniz .

Bu özel durumda, muhtemelen Uzunluk :

int sizeOfArray = array.Length;

Ama bu çok basit bir soru olduğundan ve şüphesiz bunun gibi daha pek çok soruya sahip olduğunuz için, size sadece cevabı söylemek yerine, cevabı nasıl bulacağınızı söylemeyi tercih ederim.

Visual Studio Intellisense

Bir değişkenin adını yazıp tuşuna bastığınızda, .o nesnede bulunan tüm yöntemlerin, özelliklerin, olayların vb. Bir listesini gösterir. Bir üyeyi vurguladığınızda, size ne yaptığı hakkında kısa bir açıklama verir.

F1'e basın

İstediğinizi yapabilecek bir yöntem veya özellik bulursanız ancak emin değilseniz imleci üzerine getirip F1 tuşuna basarak yardım alabilirsiniz. Burada çok daha ayrıntılı bir açıklama ve ilgili bilgilere bağlantılar bulacaksınız.

Arama

Arama terimleri size of array in C#, size sorunuzun cevabını ve çok daha fazlasını söyleyen birçok bağlantı verir. Bir programcının öğrenmesi gereken en önemli becerilerden biri bilgiyi nasıl bulacağıdır. Yanıtı kendiniz bulmak genellikle daha hızlıdır, özellikle de aynı soru daha önce sorulmuşsa.

Bir öğretici kullanın

C # öğrenmeye yeni başlıyorsanız, bir öğreticiyi takip etmeyi daha kolay bulacaksınız. MSDN'de C # öğreticilerini önerebilirim . Bir kitap istiyorsanız, Essential C # öneririm .

Yığın Taşması

Cevabı kendi başınıza bulamazsanız, lütfen soruyu Stack Overflow'da yayınlamaktan çekinmeyin. Ancak, cevabı önce kendiniz bulmak için çaba sarf ettiğinizi gösterirseniz minnettarız.


3
Aferin Mark, ama abartılı olabilir!
Nayan

1
@Nayan: Teşekkürler! OP'nin cevabını diğer posterlerden hızlı bir şekilde alması harika olsa da, yeni başlayanlara belirli sorulara cevaplar öğretmek yerine bilgiyi nasıl bulacaklarını öğretmenin daha önemli olduğunu düşünüyorum. Umarım OP bu yanıtı yararlı bulur ve bu yanıtları kendilerine bulabilecekleri yüzlerce soru sormak zorunda bırakmaz.
Mark Byers

12
Bu yaklaşımı benimsemek için zaman ayırmak için +1 - "bir adama balık verin ..." vb.
Peter Kelly

Eğer aynısını yapmak zorunda kalırsam, OP'leri burada cevabınıza yönlendireceğim =) Ve evet, size tamamen katılıyorum!
Nayan

1
Bu iyi ama bir şekilde otomatik olarak bağlantılı olması gerektiğini düşünüyorum. "Görüntülemeye değer yanıtlar" sayfası başlatamazlar mı? Yine de ekleyeceğim bir şey, soruyu göndermeden önce yığın taşmasının kendisini kontrol etmesi gerektiğidir. Çoğu zaman soruyu göndermeye başlarım ve ardından açılan ilgili soruları görüyorum. Buraya da ait değilse cevabın internette başka bir yerde olup olmadığından emin değilim.
user420667

16

1 boyutlu dizi için

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

çok boyutlu dizi için

int length = listItems.Rank;

1 boyutun boyutunu elde etmek için

int length =  listItems.GetLength(0);

2
RankMülkiyet o boyutların sayısını döndürür öğe sayısını döndürmez.
Guffa

1 boyutlu diziler tarafından desteklenen özellikler için belgeleri nerede bulabilirim? (yani Length, Rank, GetLength)
Min Tran


8

İle Lengthmülk.

int[] foo = new int[10];
int n = foo.Length; // n == 10

5

Tek bir boyut dizisi için şu Lengthözelliği kullanırsınız :

int size = theArray.Length;

Birden çok boyut dizisi için Lengthözellik, dizideki toplam öğe sayısını döndürür. GetLengthBoyutlardan birinin boyutunu elde etmek için yöntemi kullanabilirsiniz :

int size0 = theArray.GetLength(0);

4

Genel durumların çoğunda 'Uzunluk' ve 'Sayım' kullanılır.

Dizi:

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

Yazılan Liste Dizisi:

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

1

şöyle olur: 1D:

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

2D:

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

sonra bu diziyi kullanırken:

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

veya bir matris gibi bir şey beyan edebilirsiniz

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

0

Şimdiye kadar kaçırılan şey, aniden sinirlendiğim şeydi:

Dizi içindeki öğelerin miktarını nasıl bilebilirim? Mı .Lengtheşit .Countbir listesi?

Cevap şudur: new X[number] Sizinle yaratılan X tipi bir diziye yerleştirilen X türü öğelerin miktarı kendiniz taşımak zorundasınız !

Örneğin. bir sayaç kullanarak: int countItemsInArray = 0ve countItemsInArray++dizinize yapılan her atama için.

(Yeni oluşturulan dizide new X[number], numberX tipi öğeler (referanslar) için önceden ayrılmış tüm alan vardır , ilk atamanız olarak içindeki herhangi bir yere atayabilirsiniz, örneğin (if number= 100 ve değişken adı = a) a[50] = new X();.

C # 'nin yaratıldıktan sonra bir dizinin içindeki her bir yerin başlangıç ​​değerini belirleyip belirtmediğini bilmiyorum, değilse veya karşılaştıramayacağınız başlangıç ​​değeri (çünkü diziye sizin koyduğunuz bir değer olabilir), siz Başlayarak sıralı olarak atamazsanız 0(bu durumda, countItemsInArrayatanacak olandan daha küçük tüm yerler) dizinin içindeki hangi yerleri zaten atadığınız izlemesi gerekir.

Sorunuz ise bir dizinin boyutu (öğelerin uzunluğu / sayı) olmasına göre / hala ikincisi "bölme" "alternatif" veya ayakta anlamına gelir ( "öğe sayısı" Ben sadece "olarak verdi örtülü olması gerekir yukarıdaki kodumdaki .Lengthdeğerine karşılık gelen öğe miktarı "ve diğerleri verdi number):

C # bir sizeofoperatöre sahiptir ( https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/sizeof ). Yerleşik türler için kullanımı güvenlidir (int gibi) (ve yalnızca türlerde çalışır (değişkenler değil)). Böylece, bayt cinsinden bir btür dizisinin boyutu intolacaktır b.Length * sizeof(int).

(Yukarıda bahsedildiği gibi bir dizinin tüm alanı oluşturma sırasında tahsis edilmiş olduğundan ve sizeofyalnızca türler üzerinde çalıştığından, hiçbir kod sizeof(variable)/sizeof(type)çalışmaz veya izleme olmadan öğe miktarını vermez.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.