プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。時間もなく焦っています。
ファイルの内容を全て読み込ませて、配列に値を格納しているのですが、その際行単位ではなく、配列全体でもし同じ値が既にあった場合に重複させないように格納するには、どうすればよいでしょうか?

行単位なら、参考ページなども少しはありましたが、配列となると、。
わかりにくいかもしれませんが、宜しくお願いします。

A 回答 (4件)

>>ファイルの内容を全て読み込ませて、配列に値を格納しているのですが、その際行単位ではなく、配列全体でもし同じ値が既にあった場合に重複させないように格納するには、どうすればよいでしょうか?



どのような処理をやろうとしているのか、質問の意味がわかりません。

推測ですが、データがもしキーでソートされているなら、直前に読み込んだデータとの重複チェックをすればOKです。
もしソートされていないなら、通常は、データのソート処理をこの処理の前に行います。

あるいは、1行読み込むごとに、配列にあるデータと同じか?をチェックして、同じなら配列に登録しないようにします。この方法だと、しだいにチェックする時間が長くなります。

どのような処理をやろうとしているのか、補足説明をお願いいたします。

この回答への補足

回答ありがとうございます。補足説明を追加致します。
>>1行読み込むごとに、配列にあるデータと同じか?をチェックして、同じなら配列に登録しないようにします。
まさにこのことを実現したいのです。お願いします。

補足日時:2009/06/24 22:02
    • good
    • 0

Linqを使ってみました。



class Program
{
static void Main(string[] args)
{
int[] intArray = { 1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,7,7,7,8,8,8,9,9,10 };

var elements =
(from element in intArray
select element).Distinct();

foreach (var element in elements)
{
Console.Write(element + " ");
}
}
}
    • good
    • 0
この回答へのお礼

ありがとうございます。
まだC#に触れて間が無いため、Linqというものは知りませんでした。
ちなみにArrayListで格納しています。

お礼日時:2009/06/24 22:08

ArrayListを使ってみました。



class Program
{
static void Main(string[] args)
{
int[] intArray = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 2, 2, 1 };
ArrayList arrayList = new ArrayList(intArray);

var elements =
(from element in arrayList.Cast<int>()
select element).Distinct();

foreach (var element in elements)
{
Console.Write(element + " ");
}
}
}
    • good
    • 0

まず第一に


>配列全体でもし同じ値が既にあった場合に重複させないように格納する
と考えるから、悩む事になるのです。

ここは
配列全体でもし同じ値が既にあった場合には、格納しないで捨てて、次のデータを読みにいく
と考えれば良いのです。

そうすると「特定の値が配列に既存かどうか?」さえ判れば、質問者さんのやりたい事が可能になる訳です。

状況に合わせ、幾つかの方法を用います。

・ソート済みのファイルを読み込んで、配列に格納する場合。
ソートされているので、重複行は、ファイル上で連続しています。
処理は簡単で「直前に配列に格納したのと、今ファイルから読み込んだのが同じ行なら、読んだのを捨てて読み直す」だけです。

これは「直前に配列に格納したもの=配列に既存のもの」なので、やってる事は「値が配列に既存かどうか?」を判断しているのと同義です。

・バラバラのファイルを読み込んで、配列にはソートした状態で格納する場合。
これも処理は簡単で「事前に、元ファイルをソートした作業用ファイル」を作ってしまえば、前述のソート済みファイルの処理と同じ処理で済みます。

・バラバラのファイルを読み込んで、配列には読み込んだ順番で格納していき、重複行だけは無視する場合。
「データが複数のファイルになってて、ファイル単位で配列に追加していく」などの場合も該当。これが一番面倒。

データの規模が小さいなら「配列の先頭から見比べる」でも構わないけど、要素数が数十万件、数百万件になった場合は「ハッシュリスト」を使うなど、工夫が必要でしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!