きっと明日は嵐ですね.
で,本題
昨日C#で実装したところを備忘録的に記述
二つの配列 A[MaxA],B[MaxB]をシャッフルしてランダムな順番で呼び出したいのですよ.
そういうものを作りたかった.
んで二つの配列はdouble型のkeysってメンバ変数を持ってますよと
そんでもって,そのkeysには,ランダムな値が入ってます.double型でねもちろん.
double [MaxA + MaxB] key = new double[]; //シャッフル用のkey
int [MaxA + MaxB]iD = new int[]; //シャッフルした時のID
//key[]にそれぞれの配列のkeyを代入
for(int i = 0;i < MaxA + MaxB;i++)
{
if(i < MaxA ) key[i]=A[i].keys;
else key[i]=B[i-MaxA].keys;
iD[i]=i;
//上で作ったkeyの順番にIDをソート.昇順に かなり便利な関数
Array.sort(key,iD);
//いよいよ並べ替えられたものを呼び出し
for(int i=0;i < MaxA+MaxB;i++)
{
if(iD[i] < MaxA)
{
A[iD[i]]の処理
else
{
B[iD[i]-MaxA]の処理
ってな感じに作ってみた.
全要素を混ぜたランダム呼び出し.名称はいい加減
これで,今までできなかったことができるようになって嬉しいんですよ.
んでも,すぐ忘れそうなのでここに書いときます.
二個以上の要素も,おんなじ考えで出来るはず.
要は,乱数による並び替え+全部を通し番号で覚えてくれる変数に代入.
まぁ,で,なんかもっといい方法があるなら教えてほしいのですよ.
正直,オレ程度のコードを載せるのは恥ずかしすぎますが….
コメント等お待ちしております.
5 件のコメント:
うごけばいいのさっ!
これ・・・コンパイル通った?
double [] key = new double[MaxA + MaxB];
だと思うんだが・・・。
HAHAHA・・・。
所詮文系は文系だということを
実感しました。
別に記事のままでも問題ないのだが,double のkeyとかもって無くてもできると思う.Cっぽい偽コードを書くと(Cじゃ const使えないし)
const int N = MAX_A + MAX_B;
int id[N];
int a, i;
for (i = 0; i < N; i++) id [i] = i;
// シャッフルする
for(i = 1; i < N; i++){
a = rand()%(i+1);
swap(id[i], id[a]);
}
//記事のと同じ.
for(i = 0; i < N; i++){
if (id[i] < MAX_A) {
A[id[i]] ...
} else {
B[id[i] - MAX_A] ...
}
}
>pakuchan さん
まぁね~
ごもっとも
>sub さん
ああ,本当だ
これは通らんね.
実際のやつではちゃんと書いとりました.
blogへの記載ミス.はずい.
敢えて,直さないけどね.
ご指摘ありがとうございます.
>元刑事の社長 さん
あまりにも専門分野過ぎますからね.
わざわざコメントありがとうございます.
>orca さん
ああ,なるほど.
swapを使う方法もあるのか
ソートしてくれるっつうのを見つけたから,
使ってみたかったんだよね.
かなり,勉強になります.
ありがとうございました
コメントを投稿