2

基本的に私はアンドロイド音楽プレーヤーを作成しています。ライブラリ内の各曲の「コメント」セクションにSTRINGを保存することができました。

文字列の形式は次のとおりです。「ギター、ドラム、スペイン語、悲しい」

今私の懸念は、私のコードで、このSTRINGと一緒にこのmp3ファイル(そのパス)を移動するためのデータ構造を考え出すことです。それをより困難にしているのは、次のとおりです。

上で見た文字列はコンマで構成されています"、"したがって、ユーザーがプレイリストを作成するたびに、単語のリスト(TAGS)が表示され、すべての曲を調べて、彼らが探しているTAGかどうか。これを行うには、曲のCOMMENTセクションに格納されている文字列をサブ文字列(TAGS)に分割し、ユーザーが入力したときに一致させます。

良いデータ構造の提案を探しています。

コメントセクションを事前に分割して、ある種のコレクションに保存する必要がありますか?それとも私がすべての曲をループしているときにそれをしますか?入力に対してチェックするためにそれを分割しますか?

ArrayListを使用することを考えましたが、もっと良い方法があるかもしれません...

4

2 に答える 2

1

曲のリストが長い場合は、リバースインデックスの方が適しています。これは、各曲をループしてタグが含まれているかどうかを確認する代わりに、タグを直接見つけて、それに関連付けられている曲のリストを抽出することができます。タグに直接ジャンプするには、マップを使用して行うことができ、エントリ内の値は曲のリストにすることができます。

Map<String, List<Song>> tagIndex

Songは歌を抽象化するクラスだと思います。

インデックスを永続化できない場合は、起動時にバックグラウンドで構築できます。

編集-1 :(最初のコメントに返信)

すべてのAndroidデバイスでSQLiteを利用できると思います。これが実際に簡単に統合できる場合は、タグを保存してアクセスする方法がいくつかあります。

  1. タグをデータベースとコメントに保存します。
  2. タグはデータベースにのみ保存してください。

最初のアプローチでは、タグはアプリケーションの再インストール後も存続します。ただし、他のアプリケーションでもコメントにアクセスでき、他の方法でコメントを使用したり、値を編集/上書きしたりできます。このアプローチでは、アプリケーションのインストール時にインデックスを作成し、最初のインデックスが作成されたら、外出先でコメントとデータベースの同期を維持する必要があります。

2番目のアプローチは、タグがデータベースに保存され、外出先で維持される最初のアプローチと部分的に似ています。ただし、初期ビルドはなく、アプリケーションがアンインストールされるとタグが消去される可能性があります。これは受け入れられる場合と受け入れられない場合がありますが、このアプローチは最初のアプローチよりも単純です。

SQLiteを使用する場合は、タグをメモリに保持する必要はまったくありません。すべてをデータベースで管理できます。

テーブル:tag_index

列:(tag_name、song_name、song_path)

于 2012-08-01T04:22:00.007 に答える
1

Arraylist は、私が推測するさまざまな TAGS のリストを持っているので、私の意見では良い方法です。

ただし、タイプとして文字列を使用しないことをお勧めします。おそらく、タグ クラスのリストを使用する必要があります。これにより、将来変更が必要になったときに柔軟性が向上します。

それが役に立てば幸い。

于 2012-08-01T03:08:47.400 に答える