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

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

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

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

Q&A

解決済

2回答

689閲覧

varの配列からListの作成

usamino

総合スコア59

C#

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

0グッド

0クリップ

投稿2019/03/31 15:42

var a = new[] { new { no = 0,点数=99, 名前="山田",得意科目 = "数学" }, new{ no = 1,点数=99, 名前="山田",得意科目 = "数学" }, new{ no = 2,点数=75, 名前="鈴木",得意科目 = "英語" }, new{ no = 3,点数=60, 名前="田上",得意科目 = "数学" }, new{ no = 4,点数=80, 名前="木下",得意科目 = "地理" } }; List<int> no = new List<int>(); List<int> 点数 = new List<int>(); List<string> 名前 = new List<string>(); List<string> 得意科目 = new List<string>(); // 目的 // 一度にintやstringの情報を取れるデータを作りたいので それぞれを項目ごとにListにしてみたい。 // 例 // no2の生徒のデータが欲しい。 int ナンバー = 2; //1と入れる label1.text = no [ナンバー];   //2      label2.text = 点数[ナンバー];   //75 label3.text = 名前[ナンバー] //鈴木 label4.text = 得意科目[ナンバー]; //英語 コード

varの配列からListはが取り出せると嬉しいのですが考え方として間違っているのでしょうか?どなたかご教授頂けると嬉しいです。

本当はListにintやstringをごちゃまぜで保存したかったのですが無理みたいなので考えてみました。

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

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

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

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

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

Zuishin

2019/03/31 23:05

var no2 = a.Where(x => x.no == 2).First(); これで no2 の生徒が取り出せますが、ふつうはこのように一人の生徒を取り出して一つ一つのラベルにデータを入れるのではなく、BindingSource を使います。 http://kitunechan.hatenablog.jp/entry/2015/04/16/123314
usamino

2019/04/01 00:51

コメントありがとうございます。 Zuishinさんに先日教えて頂いたBindingSouce、タプルは見なくても書けるように何度も練習しました。現在大活躍しております。 大切と思われるフロー駆動型の事やBindingSouceの事は私の持っている入門書には なぜかほとんど載っておらずList、Dictionaryとの棲み分けなど感覚的に使えるようになりたいと思っておりました。 実践からくるコメントは非常に参考になります。 新しいやり方を試させて頂こうかと思います。 ありがとうございます。
guest

回答2

0

ベストアンサー

var(匿名クラス)の配列から List を作成するには、以下のコードでいけると思います。

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4 5namespace Sample 6{ 7 class MainClass 8 { 9 public static void Main(string[] args) 10 { 11 var a = new[] { 12 new { no = 0,点数=99, 名前="山田",得意科目 = "数学" }, 13 new { no = 1,点数=99, 名前="山田",得意科目 = "数学" }, 14 new { no = 2,点数=75, 名前="鈴木",得意科目 = "英語" }, 15 new { no = 3,点数=60, 名前="田上",得意科目 = "数学" }, 16 new { no = 4,点数=80, 名前="木下",得意科目 = "地理" } 17 }; 18 19 List<int> no = Array.ConvertAll(a, x => x.no).ToList(); 20 List<int> 点数 = Array.ConvertAll(a, x => x.点数).ToList(); 21 List<string> 名前 = Array.ConvertAll(a, x => x.名前).ToList(); 22 List<string> 得意科目 = Array.ConvertAll(a, x => x.得意科目).ToList(); 23 } 24 } 25}

本当はListにintやstringをごちゃまぜで保存したかったのですが無理みたいなので考えてみました。

色々とやり方はあるかと思いますが、特に理由がなければ、最初から匿名クラスではなく、以下のようなクラスを作っておくのが良いと思います。

C#

1namespace Sample 2{ 3 class Student 4 { 5 public int no { get; set; } 6 public int 点数 { get; set; } 7 public string 名前 { get; set; } 8 public string 得意科目 { get; set; } 9 10 public Student(int no, int 点数, string 名前, string 得意科目) 11 { 12 this.no = no; 13 this.点数 = 点数; 14 this.名前 = 名前; 15 this.得意科目 = 得意科目; 16 } 17 } 18 19 class MainClass 20 { 21 public static void Main(string[] args) 22 { 23 var a = new List<Student> { 24 new Student(0, 99, "山田", "数学"), 25 new Student(1, 99, "山田", "数学"), 26 new Student(2, 75, "鈴木", "英語"), 27 new Student(3, 60, "田上", "数学"), 28 new Student(4, 80, "木下", "地理"), 29 }; 30 } 31 } 32}

投稿2019/03/31 22:25

nskydiving

総合スコア6500

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

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

usamino

2019/03/31 22:49

ありがとうございます。 見事にうまくいきました。 先のリストの追加の不安まで払拭して下さいましてありがとうございます。 確かに先日学んだのですがどのように形にしたら良いのか考えておりました。 見なくても書けるようになるため何回もトライしようかと思います。 私の教科書がまた一つ増えました。 本当にありがとうございました。
guest

0

var dic = a.ToDictionary(n=>n.no); int ナンバー = 2; label1.text = dic[ナンバー].no;   //2      label2.text = dic[ナンバー].点数 ;   //75 label3.text = dic[ナンバー].名前 ; //鈴木 label4.text = dic[ナンバー].得意科目; //英語

本当はListにintやstringをごちゃまぜで保存したかったのですが無理みたいなので考えてみました。

入門書読もう。

投稿2019/03/31 16:50

kiichi54321

総合スコア1984

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

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

usamino

2019/03/31 22:55

コメントありがとうございます。 勉強しているつもりなのですが実際自分で書く段階になるととまどう事ばかりで悩んでおりました。 実践の後また勉強し いろいろ調べながら挑戦していこうかと思いました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問