人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

http://q.hatena.ne.jp/1147338266
という質問があります。
これをJavaで行おうとした場合、どの様にコーディングすれば一番シンプルになりますでしょうか?ご教授願います。(後、VBAにMapコレクションみたいなのがあるかどうか教えて頂ければ嬉しいです。)

●質問者: riceflow
●カテゴリ:コンピュータ
✍キーワード:Java MAP VBA コーディング シンプル
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kazu1107
●35ポイント

int num=10; // 要素の数

String[] str = new String[num]; // 文字列配列

int[] count = new int[num]; // 文字列毎のカウント

int i,j,k;

// ここで文字列配列「str」の代入処理をしたとする

// 検索処理

for(i=0;i<num;i++){</p>

if(count[i] > 0){ continue; }

for(j=i+1,k=0;j<num;j++){</p>

if(str[i]== str[j]){

count[j] = k;

k++;

}

}

}

検索処理を終えたあとは以下のようなデータになるはずです。

例:「"aaaa","bbbb","aaaa","cccc","aaaa","bbbb"」がstr[]に代入されてる場合。

count[0] = 0

count[1] = 0

count[2] = 1

count[3] = 0

count[4] = 2

count[5] = 1

となるはずですので、あとは書式に従って処理してください。

ちなみにテストしてません。ご注意ください。

ダミーURL:http://q.hatena.ne.jp/1147338266

◎質問者からの返答

for文の方が早いですかね?

それはそうと、比較に==を使っている時点で読む気がしないのですが・・・。

Mapコレクション使っていった方が効率がよさそうな気がするのですが(逐次にサフィックスつける方が、for文で全て計算して再度つけるよりも)。


2 ● miyamuko
●35ポイント

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Map.html

こんな感じで Map を使って出現回数を数えるのがいいんじゃないでしょうか。

import java.util.*;
public class A {
 public static void main(String[] argv) {
 String[] range = {
 "てすと",
 "テスト",
 "てすすう",
 "テスト",
 "てすうう",
 "てすすう",
 "テスト",
 "てすとと",
 null, // ブランク
 };
 List<String> result = new ArrayList<String>();
 // 文字列の出現回数を保持する map
 Map<String, Integer> seen = new HashMap<String, Integer>();
 for (String s: range) {
 if (s == null) {
 // ブランクは無視
 continue;
 }
 if (seen.containsKey(s)) {
 // 2回目以降なら出現回数をインクリメントして _n を付加する
 int n = seen.get(s) + 1;
 seen.put(s, n);
 result.add(s + "_" + n);
 } else {
 // 初回なら出現回数に 1 を入れる。
 seen.put(s, 1);
 result.add(s);
 }
 }
 // 確認
 for (String s: result) {
 System.out.println(s);
 }
 }
}
◎質問者からの返答

拡張for文とかAutoboxing(でしたっけ?)書く人いるんですねぇ?。別件で衝撃です(JDK1.4までしか使ったことないので)。やっぱり僕が遅れているんですね。

やっぱりこうなりますかね。実はプロジェクトで帳票作成する際に、サフィックスつけないといけなくって昔こうやったの覚えていてて。これ以外になんかJavaのクラスで一発でできないのかなぁ?と思ったので。

ブランクのハンドリング方法が少し気になりましたが、今回はこの様な時の対処方法を知りたかったので、私が求めていた答えになっていると思います。丁重なご回答ありがとうございました。

引き続きこれよりシンプルに実装する方法あればご回答宜しくお願いします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ