2009-11-09 6 views
1

Quel est l'équivalent de SetLength en utilisant Oxygene? J'essaie de dimensionner un tableau d'entiers.Comment définir la taille du tableau dynamique dans Oxygene (SetLength ne fonctionne pas)

var listIndexes: array of integer; 
begin 
    setLength(listIndexes,5); // doesn't work 
end; 
+1

Pouvez-vous nous dire comment se manifeste le «ne fonctionne pas»? Avez-vous une erreur de compilation ou un comportement d'exécution incorrect? –

+1

'Array.Resize ' est le chemin à parcourir, comme l'indique la réponse de jamiei. –

Répondre

2

Bill, la fonction setlength n'existe pas dans Delphi-Prism (vous pouvez utiliser l'espace de noms ShineOn.Rtl de ShineOn Wich une mise en œuvre partielle de la fonction setlength).

En prisme delphi, vous pouvez essayer cette

type 
IntegerArray = array of integer; 

var listIndexes: IntegerArray; 
listIndexes:=New IntegerArray(5); 

ou

var listIndexes: Array of Integer; 
listIndexes:=New Integer[5]; 

MISE À JOUR

En outre, vous pouvez écrire votre propre SetLength

method SetLength(var myArray: Array of Integer; NewSize: Integer); 
var 
ActualLength: Integer; 
begin 
    var DummyArray: &Array := &Array.CreateInstance(typeOf(Integer), NewSize); 
    if assigned(myArray) then 
    begin 
    ActualLength:= iif(myArray.Length > NewSize, NewSize, myArray.Length); 
    &Array.Copy(myArray, DummyArray, ActualLength); 
    end; 
    myArray := array of integer(DummyArray); 
end; 
+0

Cela crée un nouveau tableau à chaque fois. Les tableaux ne peuvent-ils pas être redimensionnés? –

+0

Oui, mais seulement avec .NET 3.5 - Les collections sont la façon préférée de faire des tableaux maintenant Rob. :) – jamiei

1

[Modifier la mise à jour] Vous pouvez utiliser la méthode Array.Resize qui semble s'appliquer uniquement aux applications .NET Framework 3.5. Le code équivalent C# ressemble à ceci:

// Create and initialize a new string array. 
    String[] myArr = {"The", "quick", "brown", "fox", "jumps", 
     "over", "the", "lazy", "dog"}; 

    // Display the values of the array. 
    Console.WriteLine( 
     "The string array initially contains the following values:"); 
    PrintIndexAndValues(myArr); 

    // Resize the array to a bigger size (five elements larger). 
    Array.Resize(ref myArr, myArr.Length + 5); 

Toutefois, si vous ciblez les versions antérieures du .NET Framework ou besoin d'Redimensionner très fréquents changements à la liste alors je vous recommande d'utiliser le ArrayList .NET ou une autre le System.Collections dans .NET, ce qui peut rendre votre code considérablement plus simple et vous permettre d'utiliser de nouvelles fonctionnalités du Framework telles que Linq.