0

私のファイルは次のとおりです。

outlook temperature Humidity Windy PlayTennis 

sunny hot high false N

sunny hot high true N

overcast hot high false P

rain mild high false P

rain cool normal false P

ファイルから一意の要素を次のように見つけました。

element:occurence

suny :2 

overcast:1 

rain:2

mild:1

cool:1

hot :4

normal:1

high:2

false:4

true:1 

n:2

p:3

次に、出現回数が 1 未満の要素を削除しました。

出力として次のようになりました:

suny : 2
rain: 2
hot :3
high:4
false:4
n:2 
p:3

今、私は出力が欲しいです(最初の出力から、他のすべての要素でループして、2つの頻繁なセットのセットを作成する必要があります)

element:occurence

sunny,hot:2
sunny,high:2
sunny,false:1
sunny,n:2
sunny,p:0
rain,hot:0
rain,high:1
rain,false:2
rain,n:0
rain,p:2
hot,high:2
hot,false:1
hot,n:2
hot,p:0
and so on..

これが私のコードです:

var occurences = File.ReadAllLines(file)
    .Skip(1)
    .SelectMany(l => l.Split(new []{' '},StringSplitOptions.RemoveEmptyEntries))
    .GroupBy(w => w)
    .ToDictionary(g => g.Key, g => g.Count());

foreach(var pair in occurences)
    label1.Text += String.Format("{0}: {1}\n", pair.Key, pair.Value);

これを実装して、最初の頻繁なセットを見つけました。

2枚目はどうすればいいですか?

また、3 番目のセットを見つける必要があります。

4

1 に答える 1

0

リファクタリングから始めます。1) データ項目を保持するクラスを作成する

public class WeatherForecast
{
    public string Outlook { get; set; }
    public string Temperature { get; set; }
    public string Humidity { get; set; }
    public bool Windy { get; set; }
    public string PlayTennis { get; set; }
}

次に、オブジェクトを作成します。

var forecasts = new List<WeatherForecast>();
foreach(var line in File.ReadLines(file).Skip(1))
{
    var values = line.Split(' ');
    forecasts.Add(new WeatherForecast
                      {
                          Outlook = values[0],
                          Temperature = values[1],
                          Humidity = values[2],
                          Windy = Convert.ToBoolean(values[3]),
                          PlayTennis = values[4]
                      });
}

次に、Linq を使用してデータをクエリする方法を理解できるかもしれません。

グループ化のヘルプについては、「LINQ Group By Multiple fields -Syntax help 」を参照してください

//Group by 1 key
forecasts.GroupBy(f => new { f.Outlook }, (key, group) => new { Key1 = key.Outlook, Count = group.Count() });

//Group by 2 keys
forecasts.GroupBy(f => new { f.Outlook, f.Temperature }, (key, group) => new { Key1 = key.Outlook, Key2 = key.Temperature , Count = group.Count()});

//Group by 3 keys
forecasts.GroupBy(f => new { f.Outlook, f.Temperature, f.Humidity }, (key, group) => new { Key1 = key.Outlook, Key2 = key.Temperature, Key3 = key.Humidity, Count = group.Count()});

結果:

ここに画像の説明を入力

于 2013-02-27T01:30:57.693 に答える