- PR -

csvファイルのソート(c#)

投稿者投稿内容
想馬
大ベテラン
会議室デビュー日: 2003/05/29
投稿数: 245
お住まい・勤務地: 神奈川・東京
投稿日時: 2006-05-30 10:33
データベースを使うのは駄目なんでしょうか?
_________________
己への戒め

「活動的な馬鹿より恐ろしいものはない」 by ゲーテ
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2006-05-30 11:26
# おっさん(?)のつぶやき。

メインメモリが十分じゃなかった時代、外部記憶装置(HDDとか)を仮想記憶として使うソート関数を書いたっけなぁ。

想馬さんのように、DBに放り込んでしまうのもアリでしょう。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-05-30 11:50
こんにちは。

私が提案したDataTableを使う方法はデータベースを使う…とも言えなくもないとは思い
ますが、どうでしょうか>想馬さん
メモリに取り込んでしまうので、小僧さんと同じくどのぐらいのサイズまでOKかは気になり
ますが、数万件程度では気にしなくても大丈夫かな。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-30 12:00
引用:

ぽぴ王子さんの書き込み (2006-05-30 11:50) より:

私が提案したDataTableを使う方法はデータベースを使う…とも言えなくもないとは思い
ますが、どうでしょうか>想馬さん


ふと確認したくなる点が出てきたのですが・・・
DataTable ってデータベースのテーブルじゃなくても使えるんですよね?
(勘違いしてるんだろうか?>漏れ)
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-05-30 12:09
引用:

ukenさんの書き込み (2006-05-29 17:39) より:
それでとりあえず成功したのですが、データ量が数万件になったらどうしようと思い、


ソートの手法はすでに枯れたものしかなく、基本的にはオンメモリーでおこなうしかありません。メモリーに乗せる情報は、少なくとも、ソートキーとなるカラムと、メモリーに乗せない分のカラムを参照するための参照(ポインター)が必要です。逆に言えば、それだけがあればソートできてしまいます。もっとも、レコード数が少なければ、すべてのカラムを乗せますが。なお、いずれにせよすべてのレコードをメモリーに乗せることは必要です。
で、数万件と言っても、数十キロ、ということであり、ソートキーが何十個もあるわけはないので、せいぜい1メガバイトです。
現在の典型的なPCのスペック(CPUのクロックがギガヘルツ、メモリーがギガバイトのオーダー)だと、メモリー容量の問題よりも先にソート時間の問題で困ることのほうが多いでしょう。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-30 12:14
引用:

R・田中一郎さんの書き込み (2006-05-30 12:00) より:

引用:

ぽぴ王子さんの書き込み (2006-05-30 11:50) より:

私が提案したDataTableを使う方法はデータベースを使う…とも言えなくもないとは思い
ますが、どうでしょうか>想馬さん


DataTable ってデータベースのテーブルじゃなくても使えるんですよね?


本来、データベースとは "データの集合" を意味します。
最近、データベース == "DBMS" になりつつあるのか、こういう混乱が起きますね。

# つまり、ぽぴ王子さんの主張は正しいです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
想馬
大ベテラン
会議室デビュー日: 2003/05/29
投稿数: 245
お住まい・勤務地: 神奈川・東京
投稿日時: 2006-05-30 13:23
引用:

じゃんぬねっとさんの書き込み (2006-05-30 12:14) より:
引用:

R・田中一郎さんの書き込み (2006-05-30 12:00) より:

引用:

ぽぴ王子さんの書き込み (2006-05-30 11:50) より:

私が提案したDataTableを使う方法はデータベースを使う…とも言えなくもないとは思い
ますが、どうでしょうか>想馬さん


DataTable ってデータベースのテーブルじゃなくても使えるんですよね?


本来、データベースとは "データの集合" を意味します。
最近、データベース == "DBMS" になりつつあるのか、こういう混乱が起きますね。

# つまり、ぽぴ王子さんの主張は正しいです。




ぽぴ王子さん、混乱させてしまってすいません。
データベースとはじゃんぬねっとさんが指摘された意味で使いました。ついでに書くとC#はHello, worldレベルなのでDataSetとか分かりません。
自分が「データベースを使うのは駄目なんでしょうか?」と書いたのは簡単なソートであればSQLでやった方が良いのではないかと思ったからです(ソート処理はDBMSに任せる)。

# 思い返してみると周りの人に「データベース使ったら」とは言うけど「データベースマネージメントシステム使ったら」と言った事がない(特定のDBMSを挙げるのはなおさら)

# 追記
よく読んだらスレ主の質問は「C#でのソート方法」なんですよね、自分の回答は的が外れているので気にしないでください。すいません。

[ メッセージ編集済み 編集者: 想馬 編集日時 2006-05-30 13:28 ]
yamasa
ベテラン
会議室デビュー日: 2003/02/15
投稿数: 80
投稿日時: 2006-05-30 13:54
引用:

unibonさんの書き込み (2006-05-30 12:09) より:
ソートの手法はすでに枯れたものしかなく、基本的にはオンメモリーでおこなうしかありません。メモリーに乗せる情報は、少なくとも、ソートキーとなるカラムと、メモリーに乗せない分のカラムを参照するための参照(ポインター)が必要です。逆に言えば、それだけがあればソートできてしまいます。もっとも、レコード数が少なければ、すべてのカラムを乗せますが。なお、いずれにせよすべてのレコードをメモリーに乗せることは必要です。


それは間違い。
マージソートであれば、全レコードを主記憶上に持たなくてもソートできます。

たとえば、UNIX環境で大きなファイルのソートをする場合は、
split(1)で適当なサイズに分割してからそれぞれをsort(1)でソートし、
最後に sort -m でマージする、といったことができます。

スキルアップ/キャリアアップ(JOB@IT)