回答編集履歴

12

文章の修正

2020/06/01 16:20

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -142,13 +142,13 @@
142
142
 
143
143
  今回の場合では、文字列を切ったり繋いだりするだけでも頑張れば実現できるかもしれません。
144
144
 
145
- しかし、[コレクション](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/collections)を覚えて使うことで大分楽に作れます。
145
+ しかし、[コレクション](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/collections)を覚えて使うことで文字列を気合で処理するよりかは非常に楽に作れます。
146
146
 
147
147
  詳しくはリンク先のページを見たり、「C# コレクション」と検索してください。
148
148
 
149
149
 
150
150
 
151
- さらに詳しく書くと、日付ユーザー名をキーカウトがる`Dictionary`クラスを使う方法が1番簡単だと思います。
151
+ さらに書くと、KeyValueひも付け保持するコレクションでる`Dictionary`クラスを使う方法が1番簡単だと思います。
152
152
 
153
153
 
154
154
 

11

文章の修正

2020/06/01 16:20

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -86,6 +86,10 @@
86
86
 
87
87
 
88
88
 
89
+ もっと問題を小さくするならば、`2019-10-18 user:Me`の入力したとき`2019-10-18,Me,1`と出力すれば要件を満たしているのではないでしょうか。
90
+
91
+
92
+
89
93
  ここまではコーディング一切無しで問題解決に必要な情報だけを考えてきました。
90
94
 
91
95
  インプットとアウトプットが固まってきたら、それを実現する手段である C# と絡めていきます。
@@ -100,7 +104,13 @@
100
104
 
101
105
 
102
106
 
103
- インプットの型は文字列なのでC#では `string` です。…と書きたいところですが、数行のテキストなので、後述するコレクションで管理するのが良いでアウトプットもインプットと同様です。
107
+ インプットの型は文字列なので1行ずつ処理する場合は `string` です。数行の文字列を処理する場合は`string`ではなく`string`を要素に持つコレクションが良いでしょう
108
+
109
+
110
+
111
+ アウトプットは複数行でかつ、日付とユーザ、アクセス回数を識別する必要があるため、オブジェクト型のコレクションもしくはKeyが日付とユーザ名、Valueがアクセス回数の`Dictionary`が良いでしょう。
112
+
113
+ ※コレクション、`Dictionary`については後述
104
114
 
105
115
 
106
116
 
@@ -152,7 +162,7 @@
152
162
 
153
163
 
154
164
 
155
- メソッドを定義して下記実装を行えば良いのです。
165
+ メソッドを定義して下記実装を行えば良いのです。
156
166
 
157
167
 
158
168
 
@@ -160,12 +170,16 @@
160
170
 
161
171
  0. テキストの1行から「日付」と「ユーザー」を取得
162
172
 
163
- 0. `Dictionary`に「日付」と「ユーザー」に対応する要素が存在するならば、そのValueをインクリメントする
173
+ 0. `Dictionary`に「日付」と「ユーザー」に対応するKeyが存在するならば、対応するValueをインクリメントする
164
174
 
165
175
  0. `Dictionary`の各要素をループで取得し、各要素のKeyとValueを表示
166
176
 
167
177
 
168
178
 
179
+ `Dictionary`を使う方法が恐らく1番簡単なので、その方向性で解説しました。
180
+
181
+
182
+
169
183
  ### 最後に
170
184
 
171
185
 
@@ -176,7 +190,7 @@
176
190
 
177
191
 
178
192
 
179
- 正直な話、C#を始めて1週間のkanayawa1さんにハードルが高いことは承知の上ですが、そういう問題に手をつけているという事は理解してください。
193
+ 正直な話、上記の内容がC#を始めて1週間のkanayawa1さんにとってハードルが高いであろうことは承知の上ですが、そういう問題に手をつけているという事は理解してください。
180
194
 
181
195
 
182
196
 

10

文章の修正

2020/06/01 16:16

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -152,6 +152,10 @@
152
152
 
153
153
 
154
154
 
155
+ メソッドを定義して、下記実装を行えば良いのです。
156
+
157
+
158
+
155
159
  0. 取得した日付とユーザーをKeyに、アクセス回数をValueに指定した`Dictionary`オブジェクトを生成
156
160
 
157
161
  0. テキストの1行から「日付」と「ユーザー」を取得

9

文章の修正

2020/06/01 15:54

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -172,11 +172,13 @@
172
172
 
173
173
 
174
174
 
175
- 正直な話、1週間のkanayawa1さんにハードルが高いことは承知の上ですが、そういう問題に手をつけているという事は理解してください。
175
+ 正直な話、C#を始めて1週間のkanayawa1さんにハードルが高いことは承知の上ですが、そういう問題に手をつけているという事は理解してください。
176
176
 
177
177
 
178
178
 
179
179
  難しいようであれば、一度この問題を解くのはやめて、もっと簡単な物から作ることをお勧めします。
180
+
181
+ 業務であれば、上司に「難易度が高い」とアラートを投げてください。
180
182
 
181
183
 
182
184
 

8

文章の修正

2020/06/01 15:52

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -134,6 +134,8 @@
134
134
 
135
135
  しかし、[コレクション](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/collections)を覚えて使うことで大分楽に作れます。
136
136
 
137
+ 詳しくはリンク先のページを見たり、「C# コレクション」と検索してください。
138
+
137
139
 
138
140
 
139
141
  さらに詳しく書くと、日付とユーザー名をキーにしてカウントができる`Dictionary`クラスを使う方法が1番簡単だと思います。

7

Dictionaryを使う方法に回答内容を変更

2020/06/01 15:48

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -136,13 +136,7 @@
136
136
 
137
137
 
138
138
 
139
- コレクションの各要素下記を保持するオブジェクトを保持し、見つかった日付ユーザー数だけカウントをしていく方法す。`Dictionary`クラスなどキー持つものなら尚簡単に作れるかと思います。
139
+ さらく書くと、日付ユーザー名をキーにしてカウントきる`Dictionary`クラスを使う方法が1番簡単と思います。
140
-
141
- - 日付
142
-
143
- - ユーザー
144
-
145
- - アクセス回数
146
140
 
147
141
 
148
142
 
@@ -150,27 +144,19 @@
150
144
 
151
145
 
152
146
 
153
- テキストの1行から日付「ユーザー」を取得し、取得した日付とユーザーを元にオブジェクトを作成し、作成したオブジェクトをコレクションで管理し、コレクションの各要素をループで取得してオブジェクトが持つ日付とユーザーを元にアクセス回数を計、同じ日付ユーザーが何回出たかを表示すれば良のです。
147
+ > ログからC#で日付との各ユーザーアクセス回数を計しようしてす。
148
+
149
+ しかし、重複しているuserを数えるコードの作成ができません。
154
150
 
155
151
 
156
152
 
157
- > 取得した日付とユーザーをにオブジェクトを
153
+ 0. 取得した日付とユーザーをKey、アクセス回数をValueに指定した`Dictionary`オブジェクトを
158
154
 
155
+ 0. テキストの1行から「日付」と「ユーザー」を取得
159
156
 
157
+ 0. `Dictionary`に「日付」と「ユーザー」に対応する要素が存在するならば、そのValueをインクリメントする
160
158
 
161
- 例えば、日付とユーザーをメンバーに持った`UserLog`クラスを定義して、そのオブジェクトを生成するようなイメージです。
162
-
163
- ```C#
164
-
165
- public class UserLog{
166
-
167
- public DateTime Date { get; set; }
159
+ 0. `Dictionary`の各要素をループで取得し、各要素のKeyとValueを表示
168
-
169
- public string Name { get; set; }
170
-
171
- }
172
-
173
- ```
174
160
 
175
161
 
176
162
 

6

文章の修正

2020/06/01 15:47

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -100,9 +100,7 @@
100
100
 
101
101
 
102
102
 
103
- インプットの型は文字列なのでC#では `string` です。後述するコレクションでもありです。
103
+ インプットの型は文字列なのでC#では `string` です。…と書きたいところですが、数行のテキストなので、後述するコレクションで管理するのが良いです。アウトプットインプットと同様です。
104
-
105
- アウトプットもインプットと同様です。
106
104
 
107
105
 
108
106
 
@@ -110,11 +108,13 @@
110
108
 
111
109
 
112
110
 
113
- C#でコーディングする際はまずクラスを定義してメソッドを定義します。
111
+ C#でコーディングする際はまずクラスを定義してからメソッドを定義します。
114
112
 
115
- メソッドに実処理を記述することができます。この内、
113
+ そして、メソッドに実処理を記述することができます。
116
114
 
115
+
116
+
117
- C#における インプット とは **メソッドの引数** (もしくはクラス内のメンバー)のことで
117
+ この内、C#における インプット とは **メソッドの引数** (もしくはクラス内のメンバー)のことで
118
118
 
119
119
  C#における アウトプット とは **メソッドの戻り値** (もしくはクラス内のメンバー)のことです。
120
120
 
@@ -146,7 +146,7 @@
146
146
 
147
147
 
148
148
 
149
- ### ここまで前提の説明をして、C#に関係のある回答
149
+ ### ここまで前提の説明をして、ようやくC#に関係のある回答
150
150
 
151
151
 
152
152
 

5

文章の修正

2020/06/01 15:36

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -146,7 +146,7 @@
146
146
 
147
147
 
148
148
 
149
- ### ここまで前提の説明をして、ようやく回答
149
+ ### ここまで前提の説明をして、C#に関係のある回答
150
150
 
151
151
 
152
152
 

4

回答がなかったので追加

2020/06/01 15:31

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -38,15 +38,11 @@
38
38
 
39
39
 
40
40
 
41
- #### そもそも「プログラム」とは
41
+ そもそも「プログラム」とはなんでしょうか。
42
42
 
43
43
  プログラムには何事も **インプット(入力)** があって、 **アウトプット(出力)** があります。
44
44
 
45
45
  そして、**インプットからアウトプットに変換する処理** があります。
46
-
47
-
48
-
49
- #### インプット と アウトプット が何かを考える
50
46
 
51
47
 
52
48
 
@@ -96,7 +92,7 @@
96
92
 
97
93
 
98
94
 
99
- #### インプット と アウトプット が何か C# ベースで考える
95
+ #### C# ベースでインプット と アウトプットを考える
100
96
 
101
97
 
102
98
 
@@ -104,21 +100,13 @@
104
100
 
105
101
 
106
102
 
107
- インプットの型は文字列なのでC#では `string` です。…と書きたいところですが、後述するオブジェクト型のコレクションがオススメです。
103
+ インプットの型は文字列なのでC#では `string` です。後述するコレクションでもありです。
104
+
105
+ アウトプットもインプットと同様です。
108
106
 
109
107
 
110
108
 
111
- 具体的な型で表記すると`List<UserLog>`、`Dictionary<UserLog,int>`、`IEnumerable<UserLog>`などです。
112
-
113
- ※`UserLog`クラスは日付とユーザーとアクセス回数をメンバーにしたものを想定しています。
114
-
115
-
116
-
117
- アウトプットもインプットと同様の型ですね。
118
-
119
-
120
-
121
- #### インプット アウトプットどこに実装するか
109
+ では、C#においてインプットとアウトプットどこに実装するのでしょう
122
110
 
123
111
 
124
112
 
@@ -158,6 +146,34 @@
158
146
 
159
147
 
160
148
 
149
+ ### ここまで前提の説明をして、ようやく回答
150
+
151
+
152
+
153
+ テキストの1行から「日付」と「ユーザー」を取得し、取得した日付とユーザーを元にオブジェクトを作成し、作成したオブジェクトをコレクションで管理し、コレクションの各要素をループで取得してオブジェクトが持つ日付とユーザーを元にアクセス回数を計算し、同じ日付とユーザーが何回出たかを表示すれば良いのです。
154
+
155
+
156
+
157
+ > 取得した日付とユーザーを元にオブジェクトを作成し
158
+
159
+
160
+
161
+ 例えば、日付とユーザーをメンバーに持った`UserLog`クラスを定義して、そのオブジェクトを生成するようなイメージです。
162
+
163
+ ```C#
164
+
165
+ public class UserLog{
166
+
167
+ public DateTime Date { get; set; }
168
+
169
+ public string Name { get; set; }
170
+
171
+ }
172
+
173
+ ```
174
+
175
+
176
+
161
177
  ### 最後に
162
178
 
163
179
 

3

文章の修正

2020/06/01 15:30

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -90,7 +90,7 @@
90
90
 
91
91
 
92
92
 
93
- ここまではプログラミング抜きで問題解決に必要な情報を考えてきました。
93
+ ここまではコーディング一切無しで問題解決に必要な情報だけを考えてきました。
94
94
 
95
95
  インプットとアウトプットが固まってきたら、それを実現する手段である C# と絡めていきます。
96
96
 

2

文章の修正

2020/06/01 15:09

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -92,7 +92,7 @@
92
92
 
93
93
  ここまではプログラミング抜きで問題解決に必要な情報を考えてきました。
94
94
 
95
- インプットとアウトプットが固まってきたら、それを実現する手段である `C#` と絡めていきます。
95
+ インプットとアウトプットが固まってきたら、それを実現する手段である C# と絡めていきます。
96
96
 
97
97
 
98
98
 

1

文章の修正

2020/06/01 15:06

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -20,11 +20,11 @@
20
20
 
21
21
  ### 回答
22
22
 
23
- 実現したいことの難易度やkanayawa1さんのスキルを踏まえると、問題解決の方を先に学んだ方が良いです。
23
+ 実現したいことの難易度やkanayawa1さんのスキルを踏まえると、プログラム書き方を先に学んだ方が良いです。
24
24
 
25
25
 
26
26
 
27
- #### 問題解決の方
27
+ #### プログラム書き
28
28
 
29
29
 
30
30