0

次の形式のcsvファイルがあります

LeftChoice、RightChoice、Left || 右

ここで、LeftChoiceとRightChoiceは一意ではないテキスト文字列であり、Left || 右はピッキングされた弦です。

私がやりたいのは、文字列、選択されたカウント、選択されていないカウントの各要素を含むリストを取得することです。

現在、私は次のものを持っています:

 var result = from line in file
                     let values = line.Split(',')
                     select new { Choice1 = values[0], Choice2 = values[1],  Result =  values[2].Equals("left")};


        var leftTrue = from dataSet in result
                 where dataSet.Result
                 group dataSet.Choice1 by dataSet.Choice1 into C1
                 select new { Value = C1.Key, Count = C1.Count() };


        var leftFalse = from dataSet in result
                       where !dataSet.Result
                       group dataSet.Choice1 by dataSet.Choice1 into C1
                       select new { Value = C1.Key, Count = C1.Count() };

        var rightTrue = from dataSet in result
                       where !dataSet.Result
                       group dataSet.Choice2 by dataSet.Choice2 into C2
                       select new { Value = C2.Key, Count = C2.Count() };


        var rightFalse = from dataSet in result
                        where dataSet.Result
                        group dataSet.Choice2 by dataSet.Choice2 into C2
                        select new { Value = C2.Key, Count = C2.Count() };

入力例

 Fred,Cole,left
 Jill,Dave,right
 Pat,Fred,right
 Pat,Pat,left

出力例:

Name Chosen NotChosen
Fred   2        0
Cole   0        1
Jill   0        1
Dave   1        0
Pat    1        2
4

1 に答える 1

1

最も簡単な方法は、名前でグループ化し、名前が選択された回数と選択されなかった回数をカウントすることだと思います。

var result = from line in file
             let values = line.Split(',')
             let left = values[0]
             let right = values[1]
             let leftChosen = values[2].Equals("left")
             let pair = new [] 
                        { 
                            new { Name = left, IsChosen = leftChosen }, 
                            new { Name = right, IsChosen = !leftChosen } 
                        }
             from item in pair
             group item by item.Name into nameGroup
             select new 
                    {
                        Name = nameGroup.Key, 
                        ChosenCount = nameGroup.Count(x => x.IsChosen),
                        NonChosenCount = nameGroup.Count(x => !x.IsChosen)
                    };
于 2012-10-23T04:12:29.243 に答える