回答編集履歴
12
文章の修正
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
|
-
さらに
|
151
|
+
さらに書くと、KeyとValueにひも付けて保持するコレクションである`Dictionary`クラスを使う方法が1番簡単だと思います。
|
152
152
|
|
153
153
|
|
154
154
|
|
11
文章の修正
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
|
-
インプットの型は文字列なので
|
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`に「日付」と「ユーザー」に対応する
|
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
文章の修正
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
文章の修正
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
文章の修正
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を使う方法に回答内容を変更
test
CHANGED
@@ -136,13 +136,7 @@
|
|
136
136
|
|
137
137
|
|
138
138
|
|
139
|
-
|
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
|
-
|
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
|
-
|
159
|
+
0. `Dictionary`の各要素をループで取得し、各要素のKeyとValueを表示
|
168
|
-
|
169
|
-
public string Name { get; set; }
|
170
|
-
|
171
|
-
}
|
172
|
-
|
173
|
-
```
|
174
160
|
|
175
161
|
|
176
162
|
|
6
文章の修正
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
文章の修正
test
CHANGED
@@ -146,7 +146,7 @@
|
|
146
146
|
|
147
147
|
|
148
148
|
|
149
|
-
### ここまで前提の説明をして、
|
149
|
+
### ここまで前提の説明をして、C#に関係のある回答
|
150
150
|
|
151
151
|
|
152
152
|
|
4
回答がなかったので追加
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
|
-
#### インプット と アウトプット
|
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
文章の修正
test
CHANGED
@@ -90,7 +90,7 @@
|
|
90
90
|
|
91
91
|
|
92
92
|
|
93
|
-
ここまでは
|
93
|
+
ここまではコーディング一切無しで問題解決に必要な情報だけを考えてきました。
|
94
94
|
|
95
95
|
インプットとアウトプットが固まってきたら、それを実現する手段である C# と絡めていきます。
|
96
96
|
|
2
文章の修正
test
CHANGED
@@ -92,7 +92,7 @@
|
|
92
92
|
|
93
93
|
ここまではプログラミング抜きで問題解決に必要な情報を考えてきました。
|
94
94
|
|
95
|
-
インプットとアウトプットが固まってきたら、それを実現する手段である
|
95
|
+
インプットとアウトプットが固まってきたら、それを実現する手段である C# と絡めていきます。
|
96
96
|
|
97
97
|
|
98
98
|
|
1
文章の修正
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
|
|