回答編集履歴

3

誤記修正

2024/03/27 04:21

投稿

fana
fana

スコア11694

test CHANGED
@@ -90,4 +90,4 @@
90
90
 
91
91
  > 問題とその答えがバラバラ
92
92
 
93
- になるのは,コードの各所でこの `shuffledCsvDatas` 用いている個所と,元の(順序がシャッフルされていない)`csvDatas` を用いている個所とがあって整合性が取れていない,みたいな話なのではなかろうか? と推測する.
93
+ になるのは,コードの各所でこの `shuffledCsvDatas` 用いている個所と,元の(順序がシャッフルされていない)`csvDatas` を用いている個所とがあって整合性が取れていない,みたいな話なのではなかろうか? と推測する.

2

問題の推測を追記

2024/03/27 04:20

投稿

fana
fana

スコア11694

test CHANGED
@@ -85,3 +85,9 @@
85
85
  5回目:
86
86
  D0, D1, D2, D3,
87
87
  ```
88
+
89
+ 質問文のコードでは,この例とは異なり, `shuffledCsvDatas` という別の変数にシャッフルした結果を受けているが,
90
+
91
+ > 問題とその答えがバラバラ
92
+
93
+ になるのは,コードの各所でこの `shuffledCsvDatas` と用いている個所と,元の(順序がシャッフルされていない)`csvDatas` を用いている個所とがあって整合性が取れていない,みたいな話なのではなかろうか? と推測する.

1

データ自体をシャッフルする話を追記

2024/03/27 04:14

投稿

fana
fana

スコア11694

test CHANGED
@@ -34,3 +34,54 @@
34
34
  ...
35
35
  }
36
36
  ```
37
+
38
+ ---
39
+
40
+ > CSVのデータを一次元配列に入れてそれをシャッフルし上から順番に読み込んで重複しないようにする
41
+
42
+ データ自体をシャッフルして良いのであれば,より単純になる:
43
+
44
+ ```C#
45
+ //何かこういう(CSVファイルから読込んだ)データがあって……
46
+ List< string[] > csvDatas = new List<string[]>
47
+ {
48
+ new string[]{ "A0", "A1", "A2", "A3" },
49
+ new string[]{ "B0", "B1", "B2", "B3" },
50
+ new string[]{ "C0", "C1", "C2", "C3" },
51
+ new string[]{ "D0", "D1", "D2", "D3" },
52
+ new string[]{ "E0", "E1", "E2", "E3" }
53
+ };
54
+
55
+ {//↑の csvDatas 自体をシャッフルしてよいならば,CSV読込直後にシャッフルしておけよい.
56
+ var Rnd = new Random(); //※ この例で使っているのは .NET Framework の Random
57
+ csvDatas = csvDatas.OrderBy( x => Rnd.Next() ).ToList();
58
+ }
59
+
60
+ //---
61
+
62
+ //あとはシャッフル済みの csvDatas を先頭から順に使うだけだ
63
+ for( int iTimes=0; iTimes<csvDatas.Count; ++iTimes )
64
+ {
65
+ var DataForThisTime = csvDatas[ iTimes ];
66
+
67
+ //※↓コレは確認用に DataForThisTime の中身をコンソールに出力してみているだけ
68
+ Console.WriteLine( (iTimes+1).ToString() + "回目:" );
69
+ foreach( var str in DataForThisTime )Console.Write( str + ", " );
70
+ Console.WriteLine();
71
+ }
72
+ ```
73
+
74
+ このコードの出力結果例:
75
+
76
+ ```
77
+ 1回目:
78
+ C0, C1, C2, C3,
79
+ 2回目:
80
+ B0, B1, B2, B3,
81
+ 3回目:
82
+ A0, A1, A2, A3,
83
+ 4回目:
84
+ E0, E1, E2, E3,
85
+ 5回目:
86
+ D0, D1, D2, D3,
87
+ ```