C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: VC#でランダム


(過去ログ 20 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■8265 / inTopicNo.1)  VC#でランダム
  
□投稿者/ ランダム (1回)-(2007/09/27(Thu) 00:55:08)

分類:[C#] 

VC# WEBアプリ です

毎回違う配列数の配列の中身を毎回違った形で中身を入れ替えてランダムに取得したいんですが
おそらく
ランド関数を使用し作ると思うんですけど、
            Random rn = new Random();

            string[] putChar = new string[count];
            for (int c = 0; c < count; c++)
            {
                putChar[c] = Char[rn.Next(count)].ToString();
            }

このような形でcountは毎回違う数。中身も変わります。
これだとばらばらにPUTCHARには文字が入りますが、同じ文字も入り重複します。
全部ばらばらに重複なしにするにはどうかいたらいいんでしょうか



引用返信 編集キー/
■8266 / inTopicNo.2)  Re[1]: VC#でランダム
□投稿者/ mあ (71回)-(2007/09/27(Thu) 01:01:13)
2007/09/27(Thu) 12:23:38 編集(投稿者)
>             string[] putChar = new string[count];

Char[n].toString() を ArrayList に格納して、取得したアイテムは
リムーブすればいけるのでは?

ArrayList = { "A","B","C" }

n = random.next(ArrayList.Count)

putChar[count++] = ArrayList.Item(n)
ArrayList.Items.remove(n)

を ArrayList.Count = 0 まで繰り返す。

上はイメージなんで、適当です。


上記イメージのサンプル:
コピペして *.html で保存。ブラウザで実行すれば結果が出てきます。
とりあえず、要件は満たしていると思うので、
これを C# に直せばOK。

<!--
C# 移植にあたり
arr, Arr 等が名前に含まれる変数は全て ArrayList に置き換える
map 変数は、Dictionary に置き換える
removeItem() に該当するのは、ArrayList#remove たぶん。調べて。
Math.random() に相当するのは、Random クラス

C# で言うと、
randText() がクラスで、removeItem,initialize,randomizer が
private メソッド、randomArray が readonly プロパティで、
showResult が public なメソッドです。

C# なら、class randText、コンストラクタに文字列取って、
initialize, randomizer 呼び出ししてから、randomArray を初期化。
てな感じでしょか。

for in 構文が無いなら、Iterator 取ってぐるぐる回して下さい。

-->
<script>
<!--
function randText(text) {
	this.srcText = text;

	function removeItem(arr, index) {
		var newArr = new Array();
		for (var i=0;i < arr.length;i++) {
			if (i != index) newArr.push( arr[i] );
		}
		return newArr;
	}

	//初期化
	function initialize(text) {
		var map = new Array();
		
		//同じ文字をカウント(1つに纏める)
		for (var i=0;i < text.length;i++) {
			var element = text.charAt(i);
			if (!map[element])
				map[element] = 0;
			map[element] += 1;
		}

		//配列を作成
		var retArr = new Array();
		for (var key in map) {
			retArr.push( key );
		}
	//	alert("initialize:: " + retArr);
		return retArr;
	}

	//ランダムで並べ替え
	function randomizer(arr) {
		var retArr = new Array();

		try {
			while (arr.length > 0) {
				var rand = parseInt(Math.random() * arr.length);
				retArr.push( arr[rand] );
				arr = removeItem(arr, rand);
			//	alert("removed::" + arr);
			}
		}
		catch (e) {
			alert(e.message);
		}

	//	alert("randomizer:: " + retArr);
		return retArr;
	}

	this.randomArray = randomizer( initialize(text) );
	this.showResult = function() {
		alert( "Result:: " + this.srcText + " => " + this.randomArray );
	}
}

var obj = new randText("ABCFWCBADEFG");
obj.showResult();

//-->
</script>



引用返信 編集キー/
■8270 / inTopicNo.3)  Re[2]: VC#でランダム
□投稿者/ επιστημη (602回)-(2007/09/27(Thu) 01:32:33)
επιστημη さんの Web サイト
> Char[n].toString() を ArrayList に格納して、取得したアイテムは
> リムーブすればいけるのでは?

あるいはそいつの要素をあらかじめかき混ぜておいて(でたらめに選んだ2要素の交換を何度か行う)、
順に取り出すとか。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -