1

Scalaでサポートされているさまざまなコレクションタイプ(リスト、マップ、ハッシュマップ、セットなど)のうち、以下のCコードで実行できるものを実装するための適切なコレクションタイプは何でしょうか。

typedef enum { GOOD BAD MAX_QUALITY } quality

struct student_data s_data[MAX_QUALITY];

コレクションのサイズは小さいです...2つまたは3つの要素ですが、データに対して同様の操作を実行する場合、コレクションがあるとコードをエレガントに保つのに役立ちます。

ありがとう!

4

3 に答える 3

2

ListまたはSeqcase classesのトリックを行う必要があります。さまざまなケース クラスと言うとき、本当の意味は次のとおりです。

case class CaseClass1(arg1: String, arg2: Int, arg3: OtherCaseClass)
case class OtherCaseClass(arg1: String, arg2: String)

val foo: List[CaseClass1] = ...

次に、 のインスタンスがCaseClass1作成され、リストに保存されます。

于 2012-11-16T00:57:56.087 に答える
1

あなたの目標が、高速なインデックス検索を提供する列挙型のようなデータ構造を作成することである場合、私は次のようにします。

sealed trait Quality { val index: Int }
case class BAD() extends Quality { val index = 0 } 
case class GOOD() extends Quality { val index = 1 } 
case class MAX_QUALITY() extends Quality { val index = 2 } 

これにより、任意のパターン マッチングを使用できquality: Quality、詳細な構文により、その時点で品質がインデックスquality.indexとして使用されることが明示されます。Int

于 2012-11-16T14:54:47.637 に答える
0

さらに詳しく教えてください。あなたの意図がタイプqualityのデータ構造タイプの何かに関連付ける構造を作成することであるstudent_data場合は、 Map を使用できます

可変アクセスが必要かどうか、または構造を作成しただけでアクセスが読み取り専用かどうかに応じて、可変または不変のマップを使用します。

あなたの場合、不変の Maps を使用することをお勧めします。Scala Collection Library は、最大 5 つの挿入されたキーと値のペアである小さなマップに特化したバージョンを提供し、特殊化されていないタイプのマップよりも優れたパフォーマンスとメモリ フットプリントを提供します。

val x = Map(1 -> 2, 2 -> 3)
println(x.getClass)
>> class scala.collection.immutable.Map$Map2

エイリアスを定義して、構造をより簡単に操作することもできます

type StudentStruct = Map[Quality, StudentData]

使用法:

val studentStruct = Map(Bad -> studentData)
val studentStruct2 = studentStruct + (Good -> studentData2)

それが役に立てば幸い。

于 2012-11-16T10:15:33.757 に答える