J'ai un tableau en dents de scie 2 dimensions (si elle est toujours rectangulaire), que j'initialiser en utilisant la boucle traditionnelle:
double[][] myArr = Enumerable.Repeat(new double[colCount], rowCount).ToArray();
6 Réponses :
double[][] myArr = Enumerable .Range(0, rowCount) .Select(i => new double[colCount]) .ToArray();
Ce que vous avez ne fonctionnerez pas comme le nouveau code> se produit avant l'appel sur répéter code>
. Vous avez besoin de quelque chose qui répète également la création de la matrice. Ceci peut être atteint à l'aide de énumérable.Range code> méthode
pour générer une plage, puis effectuer un Sélectionnez CODE> OPÉRATION
qui mappe chaque élément de la plage à une nouvelle instance de tableau (comme dans La réponse d'Amy B ).
Cependant, je pense que vous essayez d'utiliser Linq où il n'est pas vraiment approprié de faites-le dans ce cas. Ce que vous aviez avant la solution LINQ, c'est bien. Bien sûr, si vous vouliez une approche de style Linq similaire à alors vous pouvez l'appeler comme suit: < / p> énumérable. Répétez code>
, vous pouvez écrire votre propre méthode d'extension générant un nouvel élément, tel que: p>
exactement la même réponse que la mienne ... mais tu étais plus rapide;)
Le comportement est correct - répéter () code> retourne une séquence contenant l'objet fourni plusieurs fois. Vous pouvez faire le tour suivant.
double[][] myArr = Enumerable
.Repeat(0, rowCount)
.Select(i => new double[colCount])
.ToArray();
Vous ne pouvez pas faire cela avec la méthode répéter code>: le paramètre
electronique code> n'est évalué qu'une seule fois, il répète toujours la même instance. Au lieu de cela, vous pouvez créer une méthode pour faire ce que vous voulez, qui prendrait une Lambda au lieu d'une valeur:
public static IEnumerable<T> Sequence<T>(Func<T> generator, int count)
{
for (int i = 0; i < count; i++)
{
yield return generator();
}
}
...
var myArr = Sequence(() => new double[colCount], rowCount).ToArray();
Je viens d'écrire cette fonction ...
float[][] vertices = GetMatrix<float>(8, 3);
Qu'en est-il de ou p> référence: http://msdn.microsoft.com/en-us/library/aa691346 (v = vs.71) .aspx a> p> p>
Cela ne crée pas une matrice déchiquetée, comme on le demande.
Désolé Servy, tu as raison. Vous avez mis la fois la matrice est toujours rectangulaire, alors pourquoi vous avez besoin d'une matrice déchiquetée? Les tableaux qui remplissent la FISRT One Positions sont chargés de manière dynamique ou vous essayez d'éviter tout type de restriction, comme la mémoire?
Ce n'est pas mon programme. Je ne sais pas pourquoi il a besoin d'une matrice déchiquetée sur un tableau multidimentant.