2017-07-02 22 views
1

は、私は完璧に動作し、以下のobservevaleコレクションを持っています。そして私がしたいのは、CSVファイルを見て、似ている名前のスコアの合計を得ることです。カウントのObservableCollection

ので、たとえば、私のCSVは、以下の表のようなものです:

Name, score 
    Jo,1 
    Hannah,2 
    Sara,1 
    Jo,2 
    Sara,3 
    Fred,1 

私は私のコードを実行すると、私は私がしたい正確に何である下記の結果を得る:

Jo,3 
    Hannah,2 
    Sara,4 
    Fred,1 

他の私がしようとしているのは、私たちが持っている「ジョー」の数、所有しているハンナの数、所有しているサラの数、そしてフレッドの数です。名前はObservableCollection、Personsに格納されているので、ObservableCollectionにいくつの要素が含まれているかを数えたいので、同じ名前だけを数えます。これを行うには、ObservableCollectionのcountプロパティを使用しました。

Persons.Count; 

しかし、これは、私は多分、私はループの外に配置する必要があると思ったが、私は同じことを取得しています。1.を返し続ける:だから私はこれをしませんでした。

私の質問は、カウントがこのように動作している理由です。私はそれを間違って使っていますか? ObservableCollection内のすべての要素をCountするべきではありませんか?

+1

ObservableCollectionは、それが持っている要素の数を返します。「Persons」からの要素数はどこですか?あなたはそれを質問のコードに入れられますか? –

+0

あなたは何が効いているかを見せています。問題があるコードを確認できますか? – pijemcolu

答えて

1

なぜこのようにカウントが動作していますか?

Countは、コレクション内のアイテムの数を返すと仮定します。

私は間違って使用していますか?

あなたの期待に基づいて、はい。

ObservableCollectionのすべての要素をカウントする必要はありませんか?

はいです。グループ化された項目をコレクションに追加するので、各名前のうちの1つだけが表示されます。

デモンストレーション目的でlinqを使用しています。linesを仮定

Name, score 
Jo,1 
Hannah,2 
Sara,1 
Jo,2 
Sara,3 
Fred,1 

以下戻り

var data = lines.Skip(1).Select(line => { 
    var column = line.Split(','); 
    var name = column[0]; 
    int score = int.Parse(column[1]); 
    return new { name, score }; 
}); 

がデータ項目を集約する能力を提供することがグループ化解析されたデータを保持し、それぞれの名前の何が

存在する匿名オブジェクトを保持しています
var groupedData = data.GroupBy(p => p.name) 
    .Select(g => new { name = g.Key, score = g.Sum(p => p.score), count = g.Count() }); 

//eg 
//Jo,3,2 
//Hannah,2,1 
//Sara,4,2 
//Fred,1,1 

そこからそれぞれの名前の数がどれくらいあるかなど、目的のオブジェクトを作成することができます。

var persons = groupedData.Select(p => new Person(p.name, p.score) { Count = p.count }); 

人物をコレクションに追加できるようになりました。

foreach (var person in persons) { 
    Persons.Add(person); 
} 
datagrid.ItemsSource = Persons; 
1

あなたがCount()を使用することができますファイル、あなたのCSVでの人物の数を取得するには:

var personName = "Jo"; 

var count = lines.Count(l => l.Split(',')[0] == personName); 

今、あなたはあなたのファイルに"Jo"の数を持っています。

関連する問題