2013-10-04 1 views
0

J'utilise le code suivant pour créer un tableau pour trouver début et index de fin d'un tableau multidimensionnel:Une meilleure façon d'obtenir l'indice de tableau multidimensionnel

var valueArray = Enumerable.Range(0, val.GetLength(1)) 
            .Where(index => val[0, index].Contains("Rak")) 
            .ToArray(); 

que je ne me sers tabValeursMsg pour obtenir l'index départ qui est valueArray [0] et index de fin qui sera valueArray [valueArray.Length-1].

Le code ci-dessus fonctionne. Mais il semble que ce soit en train de faire un bon travail pour obtenir l'index de départ et de fin. Comme il est d'abord en train de créer valueArray en y mettant toutes les valeurs, puis en obtenant des valeurs d'index. Quelqu'un peut-il suggérer une meilleure façon de le faire?

Defination de tableau:

private string[,] _val; 
public string[,] val 
     { 
      [Pure] 
      get 
      { 
       if (_val != null) 
        return (string[,])_val.Clone(); 
       return null; 
      } 
      set 
      { 
       _val = value; 
      } 
     } 
+0

Je ne vois aucun problème avec votre implémentation. Est-ce que la rapidité et l'efficacité sont autant de facteurs pour ce que vous essayez d'accomplir? – Brian

+0

@Brian - Oui la vitesse est un problème si je dois passer par un tableau de disons 6k lignes, il prend très longtemps. – NoviceMe

+0

Je pense qu'une autre stratégie, vous ne pouvez pas créer un index? Ou une liste de listes? –

Répondre

0

Une manière d'optimiser le code est à la recherche premier et dernier éléments de la début et de la fin, respectivement.

int firstIndex; 
int lastIndex; 
for(int i = 0; i < val.GetLength(1); i++) 
{ 
    if(val[0,i].Contains("Rak")) 
    { 
     firstIndex = i; 
     break; 
    } 
} 
for(int i = val.GetLength(1) - 1; i>=0; i--) 
{ 
    if(val[0,i].Contains("Rak")) 
    { 
     lastIndex = i; 
     break; 
    } 
} 
0

Je préfère pencherais pour quelque chose comme ceci:

public class CellInfo 
{ 
    public int Row { get; set; } 
    public int Column { get; set; } 
    public string Value { get; set; } 
} 

Exemple:

List<CellInfo> _cells = new List<CellInfo>(); 

public void Example() 
{ 
    _cells.Add(new CellInfo { Column = 6, Row = 3, Value = "Rak" }); 
    _cells.Add(new CellInfo { Column = 3, Row = 8, Value = "Rak" }); 
    _cells.Add(new CellInfo { Column = 2, Row = 4, Value = "Rak" }); 
    _cells.Add(new CellInfo { Column = 5, Row = 7, Value = "Sac" }); 
    _cells.Add(new CellInfo { Column = 1, Row = 3, Value = "Sac" }); 

int[] rowRakAtColumn0 = _cells.Where(cell => cell.Column == 0 
             && cell.Value.Contains("Rak")) 
              .OrderBy(cell => cell.Row) 
               .Select(cell => cell.Row) 
                .ToArray(); 

    CellInfo[] row0Values = _cells.Where(cell => cell.Row == 0) 
           .OrderBy(cell => cell.Column) 
            .ToArray(); 
} 

Conversion à un m ulti array (si nécessaire)

public string[,] ToMultiArray(List<CellOffset> cells) 
{ 
    string[,] multiDimentional = new string[ 
     cells.Max(cell => cell.Column), cells.Max(cell => cell.Row)]; 

    cells.ForEach(cell => 
     multiDimentional[cell.Column, cell.Row] = cell.Value); 

    return multiDimentional; 
} 

string[,] values = ToMultiArray(_cells); 
Questions connexes