C#で数値の文字列表現をint []に変換する


8

数値の文字列表現をint[]各桁を含むに変換する最も短いC#ステートメントは何ですか?

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();

誰かが私の最後のアプローチを倒すことができますか?


これはCodeGolfなので、言語を指定しないことをお勧めします。
フェーズ

1
@phaseあなたは私をからかっている必要があります。言語はタイトルとタグにあります。
JJS 2015

2
@phaseのコメントは、このサイトの「質問」の99%が実際にプログラミングコンテストであるという事実を参照しています。ただし、コミュニティは、このような言語固有の「ヒント」の質問もトピックに含まれると決定しました。
デニス

@Dennis thxのアドバイス。このサイトの最初の投稿は通常、stackoverflowに投稿されますが、そのコミュニティはコードゴルフオフトピックを検討します
JJS

@デニス私はちょうどそのためにメタを検索しようとしていました!まだ質問されていなければ、これは素晴らしいゴルフの質問になると思います。
フェーズ

回答:


10

28バイト

あなたは交換することによって、あなたの最後のアプローチは少し短くすることが可能'0'によると48。不要なスペースをすべて取り除き、1文字の変数名を使用することもできます(例:number-> n)。

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

ファンタスティック-Charが算術演算子をShortとして処理するという事実を本当に否定しているstackoverflow.com/a/1516639/26877
JJS

減算は&15、同じ文字数で置き換えることもできます。
Peter Taylor

3

LINQなしのC#、97 86 82バイト

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

私はしばらく影にぶら下がっていて、これを試したかった。私はゴルファーではないし、C#の経験すらありませんが、LINQを使用せずに自分でどれだけ小さくできるかを見たかったのです。それは特別なことではありませんが、少なくとも私は楽しんでいました。

これは、他の優れたLINQソリューションよりもはるかに長く、実際にはここに属していないため、最初はこれを投稿する予定はありませんでしたが、LINQなしでそれを行うより短い方法があるかどうか、ちょっと気になります。

編集1:int.Parseの代わりに、charのASCIIコードから48を減算します。まあ、それはすでにはるかに優れています。 2:文字列とint []ではなくvarを使用するようになりました。


使用するvar代わりにstringしてint[]も4が保存されます
ピーター・テイラー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.