Converta uma representação de seqüência de caracteres de um número para int [] em C #


8

Qual é a instrução C # mais curta que converterá uma representação de seqüência de caracteres de um número em uma int[]que contenha 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();

Alguém pode vencer a minha última abordagem?


Você pode não especificar o idioma, pois esse é o CodeGolf.
fase

1
@ Phase você deve estar brincando comigo. o idioma está no título e na tag.
JJS 17/07

2
O comentário da @ phase refere-se ao fato de que 99% das "perguntas" deste site são realmente concursos de programação. No entanto, a comunidade decidiu que questões específicas de idiomas como esta também estão no tópico.
Dennis

@ Dennis thx pelo conselho. primeiro post neste site, normalmente seria publicado no stackoverflow, mas essa comunidade considera o código-golfe fora de tópico
JJS 17/15/15

@ Dennis Eu estava prestes a pesquisar meta para isso! Eu acho que isso seria uma boa pergunta de golfe, se ainda não tiver sido feita.
fase

Respostas:


10

28 bytes

Você pode tornar sua última abordagem um pouco mais curta substituindo a opção '0'by 48. Você também pode remover todos os espaços desnecessários e usar nomes de variáveis ​​com 1 caractere (por exemplo, number-> n):

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

Fantástico - realmente pregos o fato de que um Char lida com operadores arithmatic como um curto stackoverflow.com/a/1516639/26877
JJS

A subtração também pode ser substituída pela &15mesma contagem de caracteres.
21415 Peter Peter

3

C # sem 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;

Estou nas sombras há um tempo e queria experimentar isso. Não sou jogador de golfe ou tenho experiência com C #, mas queria ver o quão pequeno eu poderia conseguir sozinho, sem usar o LINQ. Não é nada de especial, mas pelo menos eu me diverti.

Eu não estava planejando postar isso no começo, já que é muito mais longo do que qualquer boa solução LINQ e realmente não pertence aqui, mas estou meio curioso se há uma maneira mais curta de fazer isso sem o LINQ.

Edit 1 : Em vez de int.Parse agora substratos 48 do código ASCII do char. Bem, isso já é muito melhor. 2 : Agora com var em vez de string e int [].


Usando em varvez de stringe int[]também salva 4. #
214 Peter Taylor

3

76 bytes

number.ToCharArray().Select(var=>Convert.ToInt32(var.ToString())).ToArray();
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.