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

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

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

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

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

Q&A

解決済

1回答

1435閲覧

C# LINQとラムダ式 読めません

sunchan1107

総合スコア55

C#

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

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

0グッド

2クリップ

投稿2017/12/10 11:18

お疲れ様です。

以下、何をやっているのか何となくは分かります。
説明しろと言われると説明できません。

初心者につき、ご教示お願い出来ますでしょうか。
メソッド毎に解説を頂けると大変ありがたいです。

string code = "A,B,,C,"; var CodeList = code?.Split(','); var dic = Enumerable.Range(1, CodeList?.Length ?? 0).Select(x => $"@CODE{x}") .Zip(CodeList ?? Enumerable.Empty<string>(), (x, y) => new { Key = x, Value = y }) .ToDictionary(x => x.Key, x => x.Value);

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

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

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

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

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

guest

回答1

0

ベストアンサー

ざっくりと説明すると以下のようになります。
各メソッドの機能や使い方は、APIリファレンス等のドキュメントで確認してください。

cs

1var CodeList = code?.Split('.') //(1) 2var dic = 3 Enumerable.Range(1, CodeList?.Length??0) //(2) 4 .Select(x => $"@CODE{x}") //(3) 5 .Zip(CodeList??Enumerable.Empty<string>(),(x,y)=> new {Key=x,Value=y}) //(4) 6 .ToDictionary((x => x.Key, x => x.Value); //(5)
  • (1) CSVの1行から要素を取り出して配列に入れる 
    > {"A","B","","C",""}
  • (2) CSVの列番号を生成
    > {1,2,3,4,5}
  • (3) 列番号から列の名前を生成
    > {"CODE1","CODE2","CODE3","CODE4","CODE5"}
  • (4) (1)の配列と(3)のシーケンスを同じ列同士でまとめる
    > {{Key="CODE1",Value="A"},{Key="CODE2",Value="B"},{Key="CODE3",Value=""},{Key="CODE4",Value="C"},{Key="CODE5",Value=""}}
  • (5) (4)のシーケンスからDictionary<string,string>()を生成

結果、"CODE{列番号}"をキーに列の値を取得するDictionaryが生成されます。
Console.WriteLine(dic["CODE1"]); //> A
Console.WriteLine(dic["CODE2"]); //> B

※なお、このコードはEnumerable.Range()を使わずにもう少しすっきり書くことが可能です。
同様の結果が得られる書き方は他にも幾つか考えられますので、別の実装方法を自分なりに考えてみるのも良いかもしれませんね。

投稿2017/12/10 14:53

pierre_3

総合スコア60

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問