- - PR -
csvファイルのソート(c#)
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-30 10:33
データベースを使うのは駄目なんでしょうか?
_________________ 己への戒め 「活動的な馬鹿より恐ろしいものはない」 by ゲーテ | ||||||||||||
|
投稿日時: 2006-05-30 11:26
# おっさん(?)のつぶやき。
メインメモリが十分じゃなかった時代、外部記憶装置(HDDとか)を仮想記憶として使うソート関数を書いたっけなぁ。 想馬さんのように、DBに放り込んでしまうのもアリでしょう。 | ||||||||||||
|
投稿日時: 2006-05-30 11:50
こんにちは。
私が提案したDataTableを使う方法はデータベースを使う…とも言えなくもないとは思い ますが、どうでしょうか>想馬さん メモリに取り込んでしまうので、小僧さんと同じくどのぐらいのサイズまでOKかは気になり ますが、数万件程度では気にしなくても大丈夫かな。 | ||||||||||||
|
投稿日時: 2006-05-30 12:00
ふと確認したくなる点が出てきたのですが・・・ DataTable ってデータベースのテーブルじゃなくても使えるんですよね? (勘違いしてるんだろうか?>漏れ) | ||||||||||||
|
投稿日時: 2006-05-30 12:09
ソートの手法はすでに枯れたものしかなく、基本的にはオンメモリーでおこなうしかありません。メモリーに乗せる情報は、少なくとも、ソートキーとなるカラムと、メモリーに乗せない分のカラムを参照するための参照(ポインター)が必要です。逆に言えば、それだけがあればソートできてしまいます。もっとも、レコード数が少なければ、すべてのカラムを乗せますが。なお、いずれにせよすべてのレコードをメモリーに乗せることは必要です。 で、数万件と言っても、数十キロ、ということであり、ソートキーが何十個もあるわけはないので、せいぜい1メガバイトです。 現在の典型的なPCのスペック(CPUのクロックがギガヘルツ、メモリーがギガバイトのオーダー)だと、メモリー容量の問題よりも先にソート時間の問題で困ることのほうが多いでしょう。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||||||||||
|
投稿日時: 2006-05-30 12:14
本来、データベースとは "データの集合" を意味します。 最近、データベース == "DBMS" になりつつあるのか、こういう混乱が起きますね。 # つまり、ぽぴ王子さんの主張は正しいです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-05-30 13:23
ぽぴ王子さん、混乱させてしまってすいません。 データベースとはじゃんぬねっとさんが指摘された意味で使いました。ついでに書くとC#はHello, worldレベルなのでDataSetとか分かりません。 自分が「データベースを使うのは駄目なんでしょうか?」と書いたのは簡単なソートであればSQLでやった方が良いのではないかと思ったからです(ソート処理はDBMSに任せる)。 # 思い返してみると周りの人に「データベース使ったら」とは言うけど「データベースマネージメントシステム使ったら」と言った事がない(特定のDBMSを挙げるのはなおさら) # 追記 よく読んだらスレ主の質問は「C#でのソート方法」なんですよね、自分の回答は的が外れているので気にしないでください。すいません。 [ メッセージ編集済み 編集者: 想馬 編集日時 2006-05-30 13:28 ] | ||||||||||||
|
投稿日時: 2006-05-30 13:54
それは間違い。 マージソートであれば、全レコードを主記憶上に持たなくてもソートできます。 たとえば、UNIX環境で大きなファイルのソートをする場合は、 split(1)で適当なサイズに分割してからそれぞれをsort(1)でソートし、 最後に sort -m でマージする、といったことができます。 |