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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

2834閲覧

C# ループ処理で受け取ったデータをループ処理で配列へ格納したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2019/03/19 03:37

編集2019/03/19 03:55

前提・実現したいこと

C#での配列への格納、取り出し方についての質問です。
エクセルから繰り返し処理でデータを受け取り処理をするアプリケーションを作成しようとしています。
availsItemでエクセルからのデータを受け取ることができたため、「partnerName、contentType、title」の種類ごとに配列へ格納しようとしているのですが、試行錯誤の末うまくいかない状態です。
ループ処理でデータを受け取り、ループ処理内で配列へ格納する処理を行いたいのですがどのように記述したらよいでしょうか?
ご存知の方いらっしゃいましたらお教え頂けたらと思います。
よろしくお願いいたします。

該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using System.Windows; 7using System.Windows.Controls; 8using System.Windows.Data; 9using System.Windows.Documents; 10using System.Windows.Input; 11using System.Windows.Media; 12using System.Windows.Media.Imaging; 13using System.Windows.Navigation; 14using System.Windows.Shapes; 15using ClosedXML.Excel; 16 17namespace WpfApp4 18{ 19 /// <summary> 20 /// MainWindow.xaml の相互作用ロジック 21 /// </summary> 22 public partial class MainWindow : Window 23 { 24 25 private List<AvailsItem> availsList = null; 26 27 public MainWindow() 28 { 29 InitializeComponent(); 30 } 31 32 private void Button_Click(object sender, RoutedEventArgs e) 33 { 34 35 // Excelファイルの読み込み 36 using (var book1 = new XLWorkbook(@"C:\Users\Desktop")) 37 { 38 // シートの読み込み 39 var moviesSheet = book1.Worksheet("Movies"); 40 41 // Availsitemクラスの配列を準備 42 this.availsList = new List<AvailsItem>(); 43 44 // 指定した列のループ取得[ 45 for (int i = 5; true; i++) 46 { 47 var partnerName = moviesSheet.Cell(i, "A").Value.ToString(); 48 49 // 終了行判定 50 if (string.IsNullOrEmpty(partnerName)) 51 { 52 break; 53 } 54 AvailsItem availsItem = new AvailsItem(); 55 // 列ごとに取得 56 availsItem.partnerName = partnerName; 57 availsItem.contentType = moviesSheet.Cell(i, "D").Value.ToString(); 58 availsItem.title = moviesSheet.Cell(i, "F").Value.ToString(); 59 60 // 配列に追加する ここがよくわかりません 61 availsList.Add(availsItem); 62            63 } 64 } 65 } 66 } 67 68 69 class AvailsItem 70 { 71 public string partnerName { get; set; } 72 public string contentType { get; set; } 73 public string title { get; set; } 74 } 75 76} 77

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

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

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

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

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

guest

回答1

0

ベストアンサー

「partnerName、contentType、title」の種類ごとに配列へ格納しようとしている

別の配列に持つという意味ですか?
だとしたら、そんな必要はないです

csharp

1var partnerNameList = availsList.Select( a => a.partnerName).ToArray(); 2var contentTypeList = availsList.Select( a => a.contentType).ToArray(); 3var titleList = availsList.Select( a => a.title).ToArray();

のように必要なところで、availsListから射影を取ればよいだけです。

投稿2019/03/19 03:46

papinianus

総合スコア12705

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

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

papinianus

2019/03/19 03:46

別の配列を持ってしまうと、データを編集したときに、同期しないといけないという厄介な問題を孕みます
退会済みユーザー

退会済みユーザー

2019/03/19 03:53

回答ありがとうございます! availsList.Add(availsItem); ここの時点で取得したデータは配列には格納されているということでよろしいのでしょうか? 他の者が所々書いたコードで私自身はあまりC#を理解できていないものでよくわかりませんでした。
papinianus

2019/03/19 04:19

そういうことであれば、理解を優先して、正確でない表現で書きます availsListが配列です。Addが配列への追加です。なので、質問の状態で、AvailsItemの配列はできています。 さらに、partnerName, contentType, titleなどの配列は必要ないです。また、あると、データが変わったときに連動させるという余計な処理を作らなければならなくなり、有害です。 C#では、あるクラスの配列ができている状態から、その一部のデータだけ抜き出して別の配列にするのはLinq(具体的には上記のSelect)を使って非常に簡単にできますので、余計なものは作らないのがよいと思います。
退会済みユーザー

退会済みユーザー

2019/03/19 05:38

とてもご丁寧でわかりやすい説明ありがとうございます。 ご回答をいただものをもとにSelectについていろいろ調べてみることで、さらに理解を深めることができました。
退会済みユーザー

退会済みユーザー

2019/03/20 07:56 編集

コメント取り消し
papinianus

2019/03/20 10:39

SurferOnWww様 未知のサイトでした。ご紹介ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問