2012-02-09 27 views
17

Desarrollador PHP aquí trabajando con C#. Estoy usando una técnica para eliminar un bloque de texto de una cadena grande al hacer estallar la cadena en una matriz y luego desplazar el primer elemento fuera de la matriz y convertir lo que queda atrás en una cadena.eliminar el primer elemento de la matriz

Con PHP (una lengua fácil & impresionante) era sólo

$array = explode('somestring',$string); 
array_shift($array); 
$newstring = implode(' ', $array); 

y he terminado.

Me enojo tanto con C# por no permitirme crear matrices dinámicas y por no ofrecerme funciones predeterminadas que pueden hacer lo mismo que PHP con respecto a las matrices. En lugar de matrices dinámicas, tengo que crear listas y predefinir estructuras clave, etc. Pero soy nuevo y estoy seguro de que aún hay formas igualmente elegantes de hacer lo mismo con C#.

¿Alguien me mostrará una manera limpia de lograr este objetivo con C#?

Frase de la pregunta: ¿Cómo puedo eliminar el primer elemento de una matriz usando el código C#.

Aquí es lo lejos que he llegado, pero RemoveAt genera un error durante la depuración, así que no creo que funciona:

//scoop-out feed header information 
if (entry_start != "") 
{ 
    string[] parts = Regex.Split(this_string, @entry_start); 
    parts.RemoveAt(0); 
    this_string = String.Join(" ", parts); 
} 
+0

¿La pregunta es cómo crear una matriz que no especifique una longitud después de dividir una cadena? –

+1

P.S. C# es un lenguaje de programación. PHP es un lenguaje de scripting. Diferentes diseños para diferentes propósitos. –

+1

@atwellpub el método 'RemoveAt' es para colecciones genéricas, no para matrices. Intellisense no debería incluso proporcionar 'RemoveAt' para la matriz de partes. – JYelton

Respuesta

37

me siento tan enojado con C# para que no me permite crear matrices dinámicas

Puede echar un vistazo a la clase List<T>. Es RemoveAt valdría la pena consultar.

Pero para su escenario particular, simplemente podría utilizar LINQ y el método Skip extensión (no se olvide de añadir using System.Linq; a su archivo con el fin de ponerla en alcance):

if (entry_start != "") 
{ 
    string[] parts = Regex.Split(this_string, @entry_start).Skip(1).ToArray(); 
    this_string = String.Join(" ", parts); 
} 
+0

Gracias a todos por su ayuda e incluso por su calor. Estoy agradecido. Gracias Darin! ¡Aclamaciones! – atwellpub

4

Usted puede utilizar LINQ para esto:

if (entry_start != "") 
    this_string = String.Join(" ", Regex.Split(this_string, @entry_start).Skip(1).ToArray()); 
11

C# no está diseñado para ser rápido y sucio, ni se especializa particularmente en la manipulación de texto. Además, la técnica que utilizas para eliminar una parte de una cadena desde un principio es una locura.

¿Por qué no solo usa String.Substring(int start, int length) junto con String.IndexOf("your delimiter")?

+0

+1, Eso sería bastante rápido. –

+1

@ssg, demasiado rápido probablemente :) –

0

Puede que te sientas más cómodo con las listas genéricas que con las matrices, que funcionan más como arreglos PHP.

List<T>

Pero si su objetivo es "para eliminar un bloque de texto de una gran cadena" entonces la manera más fácil sería:

string Example = "somestring"; 
string BlockRemoved = Example.Substring(1); 
// BlockRemoved = "omestring" 

Editar

no he entendido bien la pregunta, pensando que solo estabas eliminando el primer elemento de la matriz donde la matriz consistía en los caracteres que componen la cadena.

Para dividir una cadena por un delimitador, mire en su lugar el método String.Split. Some good examples are given here.

2
string split = ","; 
string str = "asd1,asd2,asd3,asd4,asd5"; 
string[] ary = str.Split(new string[] { split }, StringSplitOptions.RemoveEmptyEntries); 
string newstr = string.Join(split, ary, 1, ary.Count() - 1); 

splits en ",". elimina el primer registro a continuación, combina de vuelta con ""

7

Aquí es el correspondiente código C#:

string input = "a,b,c,d,e"; 
string[] splitvals = input.Split(','); 
string output = String.Join(",", splitvals, 1, splitvals.Length-1); 
MessageBox.Show(output); 
+0

+1, funcionó bien ... – Bor691

2

Como se ha indicado anteriormente, se puede utilizar LINQ. Skip(int) devolverá un IEnumerable<string> que luego puede devolver como una matriz.

string[] myArray = new string[]{"this", "is", "an", "array"}; 
myArray = myArray.Skip(1).toArray(); 
Cuestiones relacionadas