- PR -

ArrayListにアイテムを追加する方法

投稿者投稿内容
未記入
会議室デビュー日: 2006/02/15
投稿数: 7
投稿日時: 2006-02-15 12:58
初めて書き込みさせていただきます。

ArrayListの使い方についてなのですが、
例えば以下のようなコードで、追加するとします。

ArrayList al = new ArrayList();
Process[] localAll = Process.GetProcesses();

for (int i = 0; i < localAll.Length; i++)
{
al.Add(localAll[i].Id.ToString());
al.Add(localAll[i].MainModule.ModuleName);
}
そうしますと、alをクイックウォッチで見ると以下のようになるかと思います。
al
├[0] 0
├[1] System
├[2] 188
├[3] svchost.exe
├[4] 122
├[5] test.exe
├[6] 1234
(以下続く)

これでは、扱いにくいので、以下のようにするにはどうしたらよいでしょうか。
al
├[0]
│├[0] System
│└[1] 188

├[1]
│├[0] svchost.exe
│└[1] 122

├[2]
│├[0] test.exe
│└[1] 1234

どうしてもわからなかったので今は以下のようにしています。

ArrayList al = new ArrayList();
ArrayList al2 = new ArrayList();
string[] test;
Process[] localAll = Process.GetProcesses();

for (int i = 0; i < localAll.Length; i++)
{
al.Add(localAll[i].Id.ToString());
al.Add(localAll[i].MainModule.ModuleName);
test = (string[])al.ToArray(typeof(string));
al2.Add(test);
al.Clear();
}

結局al2を使ってます。
すごく無駄な事をしているなぁと思ってはいるのですが、
分からず、なんとかしなければという思いで投稿させていただきました。

よろしくお願いいたします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-02-15 13:18
ArrayList だけでやりたいってのなら答えにならないかもしれませんが。

コード:

class ProcessInfo
{
// 実際はフィールドを public にしないほうがいいですね。
public string ID;
public string ModuleName;
}

ArrayList al = new ArrayList();

for (int i = 0; i < localAll.Length; i++)
{
ProcessInfo info = new ProcessInfo();
info.ID = localAll[i].Id.ToString();
info.ModuleName = localAll[i].MainModule.ModuleName;
al.Add(info);
}




_________________
囚人のジレンマな日々

[ メッセージ編集済み 編集者: 囚人 編集日時 2006-02-15 13:21 ]
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2006-02-15 13:26
ちょっとやりたいことや問題になっていることが分かりづらいんですが、「クイックウォッチでの見え方」が問題なんですか?
クイックウォッチで見たときの見え方を変えたいということ?
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-02-15 13:32
VB.Net ですいません
こんな感じでどうですか?
コード:
        Dim al As ArrayList = New ArrayList
        Dim localAll() As Process = Process.GetProcesses()

        For i As Integer = 0 To localAll.Length
            al.Add(New String() {localAll(i).Id.ToString(), localAll(i).MainModule.ModuleName})
        Next

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-15 13:51
引用:

かるあさんの書き込み (2006-02-15 13:32) より:

For i As Integer = 0 To localAll.Length


正しくは、localAll.Length - 1 かな?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
会議室デビュー日: 2006/02/15
投稿数: 7
投稿日時: 2006-02-15 13:51
一郎様、
お返事ありがとうございます。
ご質問に答えさせてください。
引用:

「クイックウォッチでの見え方」が問題なんですか?
クイックウォッチで見たときの見え方を変えたいということ?


いいえ。
クイックウォッチで見たときの「見え方」を替えたいという事ではありません。
例えば「al」をDataTableとして扱いたい場合、
最初に記述した方のコードでは、そのDataTableをDataGridに表示するとき、
横または縦に一行(一列)の長いデータが表示される事になってしまうかと思います。

引用:
これでは、扱いにくいので、以下のようにするにはどうしたらよいでしょうか。


と、しました通り、後に記述した方の書き方にしましたら、上記の問題が解決し、
扱いやすいデータ形式となりましたので、このような方法を探しておりました。
質問内容が幼稚で且つ分かりにくい内容ですみませんでした。
今後は、もう少し分かりやすい書き方をするように気をつけます。
ご指摘ありがとうございました。



囚人様、
お返事ありがとうございます。
そして、コードも書いてくださり、とてもうれしいです。
今までわかったようなつもりで書いていましたが、
ご提示いただいたサンプルコードを拝見し、
凝り固まっていた脳が少し柔らかくなった気がします。
お陰様で、道が開けた感があります。
助かりました。
ありがとうございました。



かるあ様、
お返事ありがとうございます。
引用:
VB.Net ですいません
こんな感じでどうですか?


これからすぐ試してみたいです。
ご提示いただいた方法ができれば、
今まで何だったんだろうと言う感じです。
また後ほど、書き込みさせていただきます。
ありがとうございました。
未記入
会議室デビュー日: 2006/02/15
投稿数: 7
投稿日時: 2006-02-15 13:54
じゃんぬねっと様、
同時刻での書き込みで失礼しました。

試みた後、書き込みさせていただきます。
アドバイス感謝します。
ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-15 14:01
それと、MainModule.ModuleName って取得できる保証はないですよ。

コード:

    private static void JeanneTestMethod() {
        System.Collections.ArrayList al = new System.Collections.ArrayList();

        foreach (System.Diagnostics.Process one in System.Diagnostics.Process.GetProcesses()) {
            al.Add(new String[] {one.Id.ToString(), one.ProcessName});
        }
    }


とりあえず、foreach を使ってなるべくスコープを縮めた版。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

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