Convierta una representación de cadena de un número a int [] en C #


8

¿Cuál es la declaración C # más corta que convertirá una representación de cadena de un número en una int[]que contenga cada dígito?

string number = "1234";
number.Array.ConvertAll(line.ToCharArray(), c => Int32.Parse(c.ToString()));
number.ToCharArray().Select(i => Convert.ToInt32(i.ToString())).ToArray();
number.Select(i => Int32.Parse(i.ToString())).ToArray();
number.Select(i => i - '0').ToArray();

¿Alguien puede vencer mi último enfoque?


Es posible que no desee especificar el idioma, ya que se trata de CodeGolf.
fase

1
@phase tienes que estar bromeando. el idioma está en el título y la etiqueta.
JJS

2
El comentario de @ phase se refiere al hecho de que el 99% de las "preguntas" en este sitio son en realidad concursos de programación. Sin embargo, la comunidad ha decidido que las preguntas de "consejos" específicas del idioma como esta también están en el tema.
Dennis

@ Dennis thx por el consejo. primera publicación en este sitio, normalmente se publicaría en stackoverflow, pero esa comunidad considera el código de golf fuera de tema
JJS

@ Dennis ¡Estaba a punto de buscar meta para eso! Creo que esta sería una buena pregunta de golf, si aún no se ha hecho.
fase

Respuestas:


10

28 bytes

Puede hacer que su último enfoque sea un poco más corto reemplazando el '0'by 48. También puede quitar todos los espacios innecesarios y usar nombres de variables 1-char (por ejemplo, number-> n):

n.Select(i=>i-48).ToArray();

Fantástico: realmente aclara el hecho de que un Char maneja operadores aritmáticos como Short stackoverflow.com/a/1516639/26877
JJS

La resta también podría reemplazarse por &15el mismo recuento de caracteres.
Peter Taylor

3

C # sin LINQ, 97 86 82 bytes

var n=Console.ReadLine();int i=n.Length;var o=new int[i];while(i>0)o[--i]=n[i]-48;

He estado colgando en las sombras por un tiempo y quería probar esto. No soy un jugador de golf, ni siquiera ese experimentado con C #, pero quería ver qué tan pequeño podría obtenerlo por mi cuenta, sin usar LINQ. No es nada especial, pero al menos me divertí.

Al principio no estaba planeando publicar esto, ya que es mucho más largo que cualquier buena solución LINQ y realmente no pertenece aquí, pero tengo curiosidad si hay una forma más corta de hacerlo sin LINQ.

Edición 1 : en lugar de int.Parse, ahora resta 48 del código ASCII del personaje. Bueno, eso ya está mucho mejor. 2 : Ahora con var en lugar de string e int [].


Usando en varlugar de stringy int[]también ahorra 4.
Peter Taylor

3

76 bytes

number.ToCharArray().Select(var=>Convert.ToInt32(var.ToString())).ToArray();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.