【プログラム】 C#で、RadeLine()で読み込んだ1行に2つある数値をint[]に入れたい

1 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 15:37:13.166 ID:WTt6Xd1v0NIKU
string line = Console.ReadLine();
string[] a = line.Split();
int[] b = new int[2];
b[0] = int.Parse(a[0]);
b[1] = int.Parse(a[1]);

これでもできるんだけど、もっとスマートにしたい

2 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 15:40:28.378 ID:uLoEmBqH0NIKU
前リード2回やってヌルエラーやった奴か?
配列の要素数取って回せばいいんじゃないの
6 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 15:44:16.275 ID:WTt6Xd1v0NIKU
>>2
そうです

string line = Console.ReadLine();
string[] a = line.Split();
 int[] b = {
int.Parse(a[0]),
int.Parse(a[1])};
こんな感じ?
これでもできるけど、もっとコンパクトにしたい
全体を1~2行にできないかな

3 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 15:41:47.697 ID:uLoEmBqH0NIKU
C#ならリスト変数とかいう有能がおるからそれもええよ
10 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 15:49:40.742 ID:WTt6Xd1v0NIKU
>>3
DictionaryよりListかな
ただこの場合は、配列のほうが理解しやすい気がする

>>4
できた。ありがとう
こんどは1行にしてみる

>>8
目的というか学習になるかと思って

最後は汎用性を高めてみたい

4 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 15:43:13.867 ID:ujMqmgqy0NIKU
string[] a = Console.ReadLine().Split();
int[] b = new int[2]{int.Parse(a[0]),int.Parse(a[1])};

こんな感じでいけたような

7 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 15:44:36.626 ID:WTt6Xd1v0NIKU
>>4
おお、ちょっとやってみる
12 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 15:54:59.782 ID:WTt6Xd1v0NIKU
>>4
一行にしてみたくて
int[] a = int.Parse(Console.ReadLine().Split());
やったけど、エラー
Splitつけると配列扱いだよね?

>>9
いくつあるかわからないときには配列はだめで、Listにするんだっけ?
Listならforeachか
確か配列はforeachが使えなかったはず

13 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 15:56:27.842 ID:WZRTel5o0NIKU
>>12

これじゃだめ?
int[] numbers = Console.ReadLine().Split().Select(item => int.Parse(item)).ToArray();

17 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 16:03:48.367 ID:ujMqmgqy0NIKU
>>12
int.Parseは使い方調べればわかると思うけど単一の文字列を単一の数値に変換するだけだぞ
20 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 16:10:08.342 ID:WTt6Xd1v0NIKU
int[] a = {int.Parse(Console.ReadLine().Split())[0],int.Parse(Console.ReadLine().Split())[1]};
ってやったけど駄目だった
>>17
int.Parseは配列に格納してからじゃないと使えないんだよね?
Splitが配列になっているなら、インデックス添えればいけるかなとおもったんだけど
5 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 15:43:24.154 ID:cWqLXTSF0NIKU
c#触ったことねえわ
8 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 15:45:32.661 ID:N132HzmHrNIKU
2行にすると可読性がオワコン化して改造もしにくくなるから
素直に5行にしとけ

行数を減らすこと自体が目的なら知らんけど

9 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 15:48:48.758 ID:Jh4/qHTT0NIKU
c#やったことないけど要素数とってforかなんかで回したほうが良くない?
一行に数値が3つ以上くることがないならそれでも良いけど
11 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 15:53:21.188 ID:WZRTel5o0NIKU
こういうこと?

int[] numbers = line.Split().Select(item => int.Parse(item)).ToArray();

15 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 15:59:20.787 ID:WTt6Xd1v0NIKU
>>11
>>13
エラーがでるけど、Selectoinの使い方がわからないし、itemの意味がわからないし、ToArrayはちょっとみただけだから、どこを合わせればいいのかわからない。
>>4を1行にするには、上の知識が必要なのかな
22 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 16:12:22.766 ID:ujMqmgqy0NIKU
むりやり1行で書くとするならこうだぞ
こんな書き方する奴はいないけどな

int[] b = new int[2]{int.Parse(Console.ReadLine().Split()[0]),int.Parse(Console.ReadLine().Split()[1])};

LINQとかラムダ式はもっとC#に慣れてから覚えればいいと思う

25 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 16:21:02.803 ID:WTt6Xd1v0NIKU
>>22
Runtime error

Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
at Hello.Main () [0x00022] in /workspace/Main.cs:9
[ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
at Hello.Main () [0x00022] in /workspace/Main.cs:9

って出た

int[] a = {int.Parse(Console.ReadLine().Split()).ToArray};
ToArray使ってきれいにまとめられないかなと思ったけど、エラー

28 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 16:25:17.282 ID:WZRTel5o0NIKU
>>25

int.ParseにStringの配列を突っ込む事は出来ないよ
int.ParseできるのはString1つだけ
なのでみんなStringを1回ずつint.Parseさせるのよ

29 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 16:26:45.421 ID:ujMqmgqy0NIKU
>>25
ああすまんコンソール入力だったな
極限まで短くするのが良いプログラムじゃないからほどほどにした方がいい
23 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 16:13:55.021 ID:C9akvoPW0NIKU
C#とLINQは切っても切れない関係だから一緒にやるべきでは?
Where文とかSelect文なんかはLINQ以外でやろうとする方がこんがらがる
24 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 16:17:58.990 ID:ujMqmgqy0NIKU
>>1は基礎がまだ分かってないから段階を分けて覚えた方がいいと思う
LINQとかいきなりかめはめ波の出し方教えるようなものでしょ
26 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 16:21:38.784 ID:/qXG4kE/0NIKU
string[] a = Console.ReadLine().Split();
int[] b = Array.ConvertAll<string, int>(a,delegate(string value) {return int.Parse(value);});

とかもありか?
2行だがw

27 名前:ひみつの名無しさん 投稿日時:2020/04/29(水) 16:24:42.459 ID:/qXG4kE/0NIKU
ああ、ここに入れちゃえば1行か
int[] b = Array.ConvertAll<string, int>(Console.ReadLine().Split(),delegate(string value) {return int.Parse(value);});

コメント

タイトルとURLをコピーしました