質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

4回答

34484閲覧

C# string配列 を int配列 に変換したい(スッキリとしたコードで)

mystasly48

総合スコア25

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1グッド

4クリップ

投稿2016/09/18 12:39

string配列をint配列にスッキリとしたコードで変換したいです。

string配列に格納されている数値を、int配列に代入したいのですが、今は for文 を使用して代入しています。
コードはこのようになっています。

csharp

1string[] strArray = { "1", "10", "100", "1000", "10000" }; 2int[] intArray = new int[strArray.Length]; 3for (int i = 0; i < intArray.Length; i++) 4 intArray[i] = int.Parse(strArray[i]);

今のコードに問題はないものの、もっとスッキリと書けないかなと思っております。

ちなみにですが、string配列に格納されている値がintに変換できるものかなどを確認する必要はないので、単純にint.Parse()を使用しています。

いろいろな方法を学べたらと思っていますので、よろしくお願い致します。

sumachu👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

csharp

1int[] intArray = strArray 2 .Select(int.Parse) 3 .ToArray();

こうですね。

投稿2016/09/18 12:52

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mystasly48

2016/09/19 06:14

LINQを用いればこんなにもスッキリと書くことができるのですね。今まで損をしていました・・。 これを機に、LINQの勉強をしようと思います。ありがとうございました。
guest

0

yuba さんがLinqで解決なさってるのでちょっと違ったアプローチから…

csharp

1int[] intArray = Array.ConvertAll(strArray, int.Parse);

投稿2016/09/18 14:19

htsign

総合スコア870

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mystasly48

2016/09/19 06:19

ConvertAll... 初めて見ました。こんなやり方があったとは、驚きです。正直、使う場面が分かりませんが、使えるように挙動の勉強などをしておきたいと思います。ありがとうございました。
htsign

2016/09/19 11:47 編集

Arrayクラスのスタティックメソッドには便利なメソッドが意外と多くあるので覚えておくと便利ですよ。 Array.Find<T>(T[], Predicate<T>) は IEnumerable<T>.FirstOrDefault(Func<T, bool>).ToArray() とほぼ等価など、 パラメータもしくは戻り値(あるいは両方)が配列であれば、Linqより簡潔に書けるケースがあります。 ※補足ですが、この「<T>」などの表記を「型引数」と言い、型引数などを使うコーディングの仕組みをジェネリックあるいは総称性などと言います。 与える引数で T が一意的に決まる場合は型引数を省略することができたりします。 例えば上の Find メソッドでは第一引数に int[] を与えると T は int に固定される為、 Array.Find<int>(int[], Predicate<int>) と、暗黙的に指定したことになります。 質問に若葉マークを付けていらっしゃったので補足しましたが、余計なお世話でしたらすみません。
mystasly48

2016/09/28 11:43

お返事遅れてしまってすみません。LINQは初めて使ったので分からないことだらけです。<T>は感覚で理解した気でいましたが、そういうことでしたか。もっと勉強しないといけません・・・。ありがとうございました。
guest

0

yubaさんの回答が一番スッキリしていますが、C#でよくある書き方としてforeachも紹介させて下さい。

C#

1var intList = new List<int>(strArray.Length); 2foreach(var s in strArray) 3 intList.Add(int.Parse(s)); 4var intArray = intList.ToArray();

あと、List<T>はサイズを自動拡張してくれる配列の上位互換だと思って下さい。

コンストラクタでサイズを指定すれば、そのサイズで初めから配列を取ってくれるのでメモリ速度的にも配列と同程度の速度になります。

また配列をそのまま扱う場合は、IEnumerator<T> で受け渡ししますので憶えておくと良いと思います。

投稿2016/09/18 14:17

編集2016/09/19 14:03
iwamoto_takaaki

総合スコア2883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mystasly48

2016/09/19 06:16

foreach は知っていましたが、配列への代入の仕方が分からなかったため使用していませんでした。List と併用すれば良いのですね。とりあえずはLINQを使おうとは思いますが、覚えておきたいと思います。ありがとうございました。
nakit

2016/09/19 06:48

本件の主題から逸れますが、iwamoto_takaaki さんの回答内の IEmulator<T> は、IEnumerator<T> のことだと思われます。 ※読み方に迷うことが多いけれどアイ・エニュメレイターが一般的でしょうか。
iwamoto_takaaki

2016/09/19 14:17

>nakitさん ご指摘感謝! 綴りもめんどうですが、読み方も面倒ですよね。正確なところは私も解りません、 私は初めの一回だけ「エナミュレーターインターフェース、以後は列挙型と呼びます」としてごまかします。エニュメレイターの方が正確でしょうが言える自信がありません・・・ > mystasly48さん List<T>は実行速度で問題になることは少なくて、初心者にも優しいのでコードを読みやすくするのにとてもいいのでおすすめします。
yuba

2016/09/20 01:11

私は「アイ・イナメレイター」ですかね(辞書引かずにコメントしてます)。
guest

0

(コメント書こうとして間違えて回答として投稿してしまったので)

投稿2016/09/20 01:11

編集2016/09/20 01:12
yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問