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

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

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

Re[10]: C#でのソートついて


(過去ログ 48 を表示中)

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

■26058 / inTopicNo.1)  C#でのソートついて
  
□投稿者/ mirrorB (1回)-(2008/10/01(Wed) 12:12:12)

分類:[C#] 


C# 2005でのソートについて教えていただきたいです。

テキストファイルにある数人分の学籍番号と名前を読み込んでソートして表示させたいのですが、
初心者なりにいろいろ考えたのですが全くわかりません。

表示方法などどのような方法でもよいので出来れば詳しく教えていただきたいです。

よろしくお願いいたします。
引用返信 編集キー/
■26060 / inTopicNo.2)  Re[1]: C#でのソートついて
□投稿者/ aetos(旧シャノン) (10回)-(2008/10/01(Wed) 12:28:08)
No26058 (mirrorB さん) に返信
>
> C# 2005でのソートについて教えていただきたいです。
>
> テキストファイルにある数人分の学籍番号と名前を読み込んでソートして表示させたいのですが、
> 初心者なりにいろいろ考えたのですが全くわかりません。

List<T> に読み込んで Sort メソッドで一発です。
引用返信 編集キー/
■26071 / inTopicNo.3)  Re[2]: C#でのソートついて
□投稿者/ mirrorB (2回)-(2008/10/01(Wed) 13:57:27)
No26060 (aetos(旧シャノン) さん) に返信

> List<T> に読み込んで Sort メソッドで一発です。

テキストファイルのList<T>への読み込みについて教えてください。
引用返信 編集キー/
■26073 / inTopicNo.4)  Re[3]: C#でのソートついて
□投稿者/ よねKEN (195回)-(2008/10/01(Wed) 14:10:08)
No26071 (mirrorB さん) に返信
> ■No26060 (aetos(旧シャノン) さん) に返信
>
>>List<T> に読み込んで Sort メソッドで一発です。
>
> テキストファイルのList<T>への読み込みについて教えてください。

最初の質問もこの追加質問もそうですが、自分でどこまでできて、どこがわからないのか?
ということが書かれていません。例えば、ファイルの読み込みではStreamReaderクラスを使いますが、
このクラスは知っていますか?

何を知っていて、何を知らないのかを推測する情報がないと一から十まで説明しないと
いけなくなり回答しづらいですので、mirrorBさんの現在の状態をできる限り詳しく説明してくださいね。

もしファイルの読み込み処理についてまったく知識がないのであれば入門書で学習しましょう。

この質問を解決するのに必要そうなキーワードを以下に挙げておきます。

StreamReaderクラス
Encodingクラス
インターフェースとは
ジェネリックとは
IComparable<T>インターフェース
IComparer<T>インターフェース
List<T>クラス
引用返信 編集キー/
■26074 / inTopicNo.5)  Re[4]: C#でのソートついて
□投稿者/ 裕猫 (72回)-(2008/10/01(Wed) 14:11:45)
> ■No26071 (mirrorB さん) に返信
>>テキストファイルのList<T>への読み込みについて教えてください。
>
http://learninglogbook.blogspot.com/2008/03/blog-post_5018.html
ここが参考になりませんか?
引用返信 編集キー/
■26080 / inTopicNo.6)  Re[4]: C#でのソートついて
□投稿者/ mirrorB (3回)-(2008/10/01(Wed) 14:51:28)
No26073 (よねKEN さん) に返信

>
> 最初の質問もこの追加質問もそうですが、自分でどこまでできて、どこがわからないのか?
> ということが書かれていません。例えば、ファイルの読み込みではStreamReaderクラスを使いますが、
> このクラスは知っていますか?
>
> 何を知っていて、何を知らないのかを推測する情報がないと一から十まで説明しないと
> いけなくなり回答しづらいですので、mirrorBさんの現在の状態をできる限り詳しく説明してくださいね。
>
> もしファイルの読み込み処理についてまったく知識がないのであれば入門書で学習しましょう。
>
> この質問を解決するのに必要そうなキーワードを以下に挙げておきます。
>
> StreamReaderクラス
> Encodingクラス
> インターフェースとは
> ジェネリックとは
> IComparable<T>インターフェース
> IComparer<T>インターフェース
>

すみません。
StreamReaderクラスはわかります。
StreamReaderクラスでテキストファイルの読み込んでテキストボックスへの表示などはわかりますが、
List<T>クラスへの読み込み方がわかりません。
Sort メソッドを使ってのソートもいまいちわからない状況です。

勉強不足ですみませんがお教えください。








引用返信 編集キー/
■26086 / inTopicNo.7)  Re[5]: C#でのソートついて
□投稿者/ aetos(旧シャノン) (11回)-(2008/10/01(Wed) 15:18:08)
No26080 (mirrorB さん) に返信
> すみません。
> StreamReaderクラスはわかります。
> StreamReaderクラスでテキストファイルの読み込んでテキストボックスへの表示などはわかりますが、
> List<T>クラスへの読み込み方がわかりません。
> Sort メソッドを使ってのソートもいまいちわからない状況です。
>
> 勉強不足ですみませんがお教えください。

「ファイルの内容を List<T> に読み込んでソートする」とかたまりで考えるのはやめましょう。
最終的にはかたまりにする必要がありますが、方法は別個に学習できます。
「ファイルから一行ずつ読みだす」方法は既に分かっているわけですから、あとは「List<T> に文字列を追加してソートする」方法がわかれば、組み合わせて目的を実現できます。
データの出所がどこであれ、List<T> にデータを追加してソートする方法は変わらないのですから。

さて、では残る「List<T> の使い方」ですが、サンプルコードは MSDN に載っています。

http://msdn.microsoft.com/ja-jp/library/6sh2ey19.aspx
http://msdn.microsoft.com/ja-jp/library/b0zbh7b6.aspx

List<T> というヒントをもらったわけですが、これの存在は知っていましたか?
知らなかったのなら、「これはいったい何なのだろう?」と MSDN を見てみましたか?
ヒントをもらったら、そのヒントに含まれるキーワードでまず MSDN を調べる。よくわからなければさらに検索エンジンでネット上の資料を探す。
その上で、どこまでは理解できた、どこからが理解できない(これこれのページに載っているコードのこの行の意味が分からない、といった感じで)ということを、具体的に再度質問する。
そうしなければいつまでたっても力がつきませんよ。

学習意欲がない人に答えを教える人は、こういう掲示板には多くありません。
学習意欲がある人にはいくらでも親切にしてくれますよ。
引用返信 編集キー/
■26087 / inTopicNo.8)  Re[5]: C#でのソートついて
□投稿者/ カドルドエグ (40回)-(2008/10/01(Wed) 15:19:05)
No26080 (mirrorB さん) に返信
> すみません。
> StreamReaderクラスはわかります。
> StreamReaderクラスでテキストファイルの読み込んでテキストボックスへの表示などはわかりますが、
> List<T>クラスへの読み込み方がわかりません。
> Sort メソッドを使ってのソートもいまいちわからない状況です。
> 
> 勉強不足ですみませんがお教えください。

List<T>クラスについてはMSDNに任せるとして…
http://msdn.microsoft.com/ja-jp/library/6sh2ey19.aspx

考え方は、読み込んだファイルをまわして、その中で1行ずつリストにいれていくだけです。
以下サンプルコードです。

※環境:Win XP Pro SP3・VS2005
※フォームにはListBoxがあるのみ
※使用するテキストファイル(Unicodeで保存)「gakuseki.txt」の中身↓
D,200407625,ああああ
E,200501234,いいいい
A,651213040,うううう
I,953148271,ええええ
C,453435435,おおおお


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            StreamReader reader = new StreamReader(@"C:\gakuseki.txt", Encoding.Unicode);

            // List<T>のインスタンスを作成。「T」には「型」が入ります。
            // 今回はstringを扱います
            List<string> studentsList = new List<string>();

            // 読み込んだファイルが終わりに達するまで繰り返す
            while (!reader.EndOfStream)
            {
                // 先ほど作ったリストに1行ずつ追加
                studentsList.Add(reader.ReadLine());
            }
            // リーダーを解放
            reader.Dispose();

            // ソート 
            studentsList.Sort();

            // 確認用のListBoxに表示
            this.listBox1.DataSource = studentsList;

        }
    }
}

今回はわかりやすくするために引数のないSortメソッド、
頭にアルファベットが入ったテキストファイルを使用しました。
Sortメソッドはいくつかオーバーロードがあるので、仕様に合わせて使い分けてください。

List<(Of <(T>)>).Sort メソッド 
http://msdn.microsoft.com/ja-jp/library/3da4abas.aspx

引用返信 編集キー/
■26088 / inTopicNo.9)  Re[5]: C#でのソートついて
□投稿者/ よねKEN (198回)-(2008/10/01(Wed) 15:27:33)
> StreamReaderクラスはわかります。
> StreamReaderクラスでテキストファイルの読み込んでテキストボックスへの表示などはわかりますが、
> List<T>クラスへの読み込み方がわかりません。

ということは、ファイルの読み込みはできているということです。
StreamReaderのReadLineメソッドで読み込めば行単位で読み込めますよね。
List<T>への登録はAddメソッドで行います。
でも、ファイルの1行をそのままLis<T>に取りこむのは希望とはたぶん違いますよね?
学籍番号と名前の情報から例えば学籍番号でソートしたい場合、
学籍番号と名前をバラバラに保管しておく必要がありますが、
ファイルの1行をそのままList<T>に保管するのは都合が悪いのではないかと思うのですがいかがですか?

最初(No26058)の質問文に
「テキストファイルにある数人分の学籍番号と名前を
読み込んでソートして表示させたいのですが」

とありますが、テキストファイルはどんな構成になっているのか?
カンマ区切りなのか、固定長なのか、その他なのかといったフォーマットについての情報がありません。
また1人分の構成情報は学籍番号と名前の2つだけですべてでしょうか?
ソートするのは何でソートするのでしょうか?(学籍番号?名前の順?etc)

といった情報が不足しています。

> Sort メソッドを使ってのソートもいまいちわからない状況です。

Sortメソッドのヘルプは読みましたか?

List<T>.Sortメソッド
http://msdn.microsoft.com/ja-jp/library/3da4abas.aspx

わからないのはどの辺ですか?
例えば、お題として、
「List<T>に3、2、10、5、8を順に登録し、これをソートしてください(昇順、降順はどちらでもよい)」
とあったら、コード書けますか? 手順としては、List<int>のインスタンスを生成し、
Addメソッドを使って3〜8を登録し、最後にSortメソッドを呼び出す、となります。

ここがわかるようになったら、次のステップですね。

・ファイルの1行を学籍番号、名前などの項目ごとに分割する方法
→ 必要知識:Stringクラスのいろいろなメソッド
・分割した1名分の情報を格納しておく独自のクラスを定義する方法
→ 必要知識:独自クラスの定義方法と使い方
・独自にクラスを使って期待するとおりのソートをする方法
→ IComparable<T>インタフェース、IComparer<T>インターフェースとインタフェースの実装方法や利用方法

といった知識の習得が必要になってくると思います。

引用返信 編集キー/
■26091 / inTopicNo.10)  Re[6]: C#でのソートついて
□投稿者/ カドルドエグ (41回)-(2008/10/01(Wed) 15:40:41)
#空気読み違えた…。orz

他の回答者の方といいたいことが被りますが、
まずはご自身の状況(どこがどうわからない、開発環境は何を使ってる、こうしたい(または仕様はこう)など)
を把握し、その次は「ご自身で調べて」みましょう。


でないと、
私のように想像だけでサンプルを出すのが出る→よくわかんないけどコード出たから使ってみる
→何か違う→結局わからない→掲示板に書き込む→最初に戻る

といったループに嵌りかねません。
引用返信 編集キー/
■26096 / inTopicNo.11)  Re[7]: C#でのソートついて
□投稿者/ PATIO (134回)-(2008/10/01(Wed) 16:01:18)
> 私のように想像だけでサンプルを出すのが出る→よくわかんないけどコード出たから使ってみる
> →何か違う→結局わからない→掲示板に書き込む→最初に戻る
>
> といったループに嵌りかねません。

更に怖いのは、提示されたコードで動いたみたい。
「あーできたー」で終わってしまう。
実はサンプルソースの提示はある程度わかっている人には良いのですけれど、
さっぱりわかりませんと言う場合は単なるパターン学習になってしまうケースが
多いのであまりよくなかったり。
理屈の部分を突き詰めないとちょっとパターンが代わっただけで
質問しなくてはならないハメになっちゃいます。

サンプルを出してもらって骨までしゃぶりつくすように利用する人なら
全く問題ないんですけれどね。

引用返信 編集キー/
■26102 / inTopicNo.12)  Re[8]: C#でのソートついて
□投稿者/ mirrorB (4回)-(2008/10/01(Wed) 17:46:00)
いろいろとご指導ありがとうございました。

自分の勉強不足を痛感したので、また入門書から勉強して自分でしっかりと説明できるようになって、
また質問させていただきたいと思います。

ありがとうございました。
引用返信 編集キー/
■26104 / inTopicNo.13)  Re[9]: C#でのソートついて
□投稿者/ も (45回)-(2008/10/01(Wed) 19:36:32)
No26102 (mirrorB さん) に返信
> いろいろとご指導ありがとうございました。
>
> 自分の勉強不足を痛感したので、また入門書から勉強して自分でしっかりと説明できるようになって、
> また質問させていただきたいと思います。
入門書でしっかりと説明できるようになったためしがない件

同じ本を繰り返して読んでも違う体感は中々得られません
違う本を読んで入門書に戻ってくると,色々な体感が得られるかもしれません.
(DQならスライム倒し続けてもなかなかLvがあがらない状況?
→違うフィールドで,もっと色々な戦闘を繰り返して敵の倒し方をマスターする段階?)
引用返信 編集キー/
■26124 / inTopicNo.14)  Re[10]: C#でのソートついて
□投稿者/ mirrorB (5回)-(2008/10/02(Thu) 11:21:34)
No26104 (も さん) に返信

>
> 同じ本を繰り返して読んでも違う体感は中々得られません
> 違う本を読んで入門書に戻ってくると,色々な体感が得られるかもしれません.
> (DQならスライム倒し続けてもなかなかLvがあがらない状況?
> →違うフィールドで,もっと色々な戦闘を繰り返して敵の倒し方をマスターする段階?)

ありがとうございます。
違う本を読むなど自分なりに勉強したいと思います。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -