2016-09-12 5 views
0
List<Scorer> hScorers; 

    private void button_Click(object sender, RoutedEventArgs e) 
    { 

     hScorers = new List<Scorer>(); 
     hScorers.Add(new Scorer() { PlayerRef = "joe", Time = "2'"}); 
     hScorers.Add(new Scorer() { PlayerRef = "moe", Time = "2'" }); 
     hScorers.Add(new Scorer() { PlayerRef = "joe", Time = "5'" }); 
     hScorers.Add(new Scorer() { PlayerRef = "roe", Time = "2'" }); 
     hScorers.Add(new Scorer() { PlayerRef = "joe", Time = "8'" }); 
     hScorers.Add(new Scorer() { PlayerRef = "joe", Time = "3'" }); 

     int count = 0; 
     foreach (var v in hScorers) 
     { 
       if (v.PlayerRef == hScorers[0].PlayerRef) 
       { 
        if (count != 0) 
        { 
         hScorers[0].Time = hScorers[0].Time + ", " + v.Time; 
         v.PlayerRef = ""; 
         v.Time = ""; 
        }      
       } 
      count++; 
     } 
     hScorers.Where(x => x.PlayerRef == "") 
      .ToList() 
      .ForEach(x => 
      { 
       if (x.PlayerRef == "") 
       { 
        hScorers.Remove(x); 
       } 
      });    
     foreach (var scorer in hScorers) 
     { 
      listBox.Items.Add(scorer.PlayerRef + " "+ scorer.Time); 
     } 
    } 

私が達成したいのは、 "ジョー"のrefを持つ4人のプレイヤーがオブジェクトのリストにあるので、 "joe"のplayerrefを持つプレイヤーを1人持っていたいので、プレーヤーが存在する場合はどのようにオブジェクトのリストを動的に編集しますか?#

playerref = "joe" Time = 2' 、3' 、5' 、8'

場合、または一人のプレイヤーその: playerref = "萌え" 時間= 2'

このコードは、私はそれが何をしたいんが、その動的ではありません。 hScorers [0] .PlayerRefを使用してハードコーディングしているためです。ただhScorers [0] .PlayerRefの代わりに、私はすべての可能なプレーヤーでフィルタリングしたいと思います。だから、それが使用する、リスト内の5人の選手が存在する場合(リストを編集するために、要するに、私は重複した選手を削除し、既存のインスタンスにそこに時間を追加したい):

hScorers[0].PlayerRef 
hScorers[1].PlayerRef 
hScorers[2].PlayerRef 
hScorers[3].PlayerRef 
hScorers[4].PlayerRef 

答えて

0

利用のLINQのGroupBy。次のようにして仕事をしてください:

hScorers = hScorers 
    .GroupBy(s => s.PlayerRef) 
    .Select(g => new Scorer { PlayerRef = g.Key, Time = string.Join(", ", g.Select(v => v.Time)) }) 
    .ToList(); 
関連する問題