2010-04-20 24 views
6

Küresel bir değişken int[] var ve verilerini temizlemek ve bir döngü içinde tekrar doldurmak istiyorum.Bir dizi nasıl temizlenir

Bu nasıl mümkündür C#?

+5

nasıl C# global değişkene sahip olabilir? –

+0

@rep_movsd başka bir soru;) lol –

+0

Döngünün her yinelemesinde eleman sayısı değişiyor mu? Bazı kodları görmek güzel olurdu. –

cevap

9

Bunun yerine bir liste kullanmak daha kolay olmaz mıydı?

public List<int> something = new List<int>(); 

Ve sonra:

something.Add(somevalue); 

Ve temizlemek için:

something.Clear(); 
+0

Int [] 'dan nefret ediyorum Listeyi seviyorum. +1 –

+11

-1: Bir listeyi kullanmanın daha kolay olacağını hiç bilmiyorsunuz! Soru diziler hakkında. – Adrian

+0

@Adrian: OP'nin <> Listesi'ne aşina olma ihtimali yoktur. Daha iyi alternatifler önermek harika olurdu. Bununla ilgili yanlış bir şey yok. Bu cevap için +1. – Nayan

0
int[] x 
    int[] array_of_new_values 

    for(int i = 0 ; i < x.Length && i < array_of_new_values.Length ;i++) 
    { 
     x[i] = array_of_new_values[i]; // this will give x[i] its new value 
    } 

Neden temizle? Sadece yeni değerler atayın.

+0

Temiz bir sıfir dizisi isteyebilmeniz için birçok neden görebiliyorum, örneğin hata ayıklama, diziye giren verilerin görünmesi, verilerin üzerine yazılmasından çok daha kolay olacaktır. – Adrian

+1

Bazı değerleri değiştiriyorum, diğeri "0" olmalıdır. Bu şekilde yapabilirim ama 1 satır kodu arıyordum. – LIX

4

Bu yazı için doğru cevap değil ancak ihtiyaca göre bu mantığı kullanabilirsiniz. İşte bir kod Snippet'ler here

using System; 

class ArrayClear 
{ 

    public static void Main() 
    { 
     int[] integers = { 1, 2, 3, 4, 5 }; 
     DumpArray ("Before: ", integers); 
     Array.Clear (integers, 1, 3); 
     DumpArray ("After: ", integers); 
    } 

    public static void DumpArray (string title, int[] a) 
    { 
     Console.Write (title); 
     for (int i = 0; i < a.Length; i++) 
     { 
     Console.Write("[{0}]: {1, -5}", i, a[i]); 
     } 
     Console.WriteLine(); 
    } 
} 

alınır ve bu çıktısı:

Before: [0]: 1 [1]: 2 [2]: 3 [3]: 4 [4]: 5 
After: [0]: 1 [1]: 0 [2]: 0 [3]: 0 [4]: 5 
19

statik Array.Clear() yöntemi "için false sıfıra Array elemanların bir dizi setleri, ya Hiçbir şey, eleman tipine bağlı olarak ". Eğer tüm diziyi silmek istiyorsanız, bu yöntemi kullanmak bir uzunluk gibi başlangıç ​​indeksi olarak 0 ve myArray.Length bunu sağlayabilir:

Array.Clear(myArray, 0, myArray.Length); 
+0

Bu yöntem diziyi tam olarak temizlemez, ancak dizideki her öğe için 0/false/null değerini ayarlayın. –

+0

@ 1_bug Başka hangi "takas" mümkün olabilir? – Nyerguds

1

Neden sadece yeni bir dizi oluşturmak ve dizi değişkeni mevcut atamak? İki boyutlu diziler için

x = new int[x.length]; 
+0

Bu, çöp toplayıcısının, hafızada geride bıraktığınız her şeyi temizlemek için ekstra çalışma alanı olduğu anlamına gelir. – Nyerguds

0

, siz feryat yapmalıdır:

Array.Clear(myArray, 0, myArray.GetLength(0)*myArray.GetLength(1));